src/hotspot/share/gc/shared/objectCountEventSender.cpp
author egahlin
Tue, 15 May 2018 20:24:34 +0200
changeset 50113 caf115bb98ad
parent 47216 71c04702a3d5
permissions -rw-r--r--
8199712: Flight Recorder Reviewed-by: coleenp, ihse, erikj, dsamersoff, mseledtsov, egahlin, mgronlun Contributed-by: erik.gahlin@oracle.com, markus.gronlund@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     1
/*
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
     2
 * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     4
 *
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     7
 * published by the Free Software Foundation.
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     8
 *
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    13
 * accompanied this code).
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    14
 *
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    18
 *
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    21
 * questions.
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    22
 *
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    23
 */
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    24
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    25
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    26
#include "precompiled.hpp"
30764
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 27673
diff changeset
    27
#include "gc/shared/gcId.hpp"
fec48bf5a827 8079792: GC directory structure cleanup
pliden
parents: 27673
diff changeset
    28
#include "gc/shared/objectCountEventSender.hpp"
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    29
#include "jfr/jfrEvents.hpp"
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    30
#include "memory/heapInspection.hpp"
27673
df559a888b9f 8065361: Fixup headers and definitions for INCLUDE_TRACE
mgronlun
parents: 25350
diff changeset
    31
#include "utilities/macros.hpp"
21767
41eaa9a17059 8028128: Add a type safe alternative for working with counter based data
mgronlun
parents: 19290
diff changeset
    32
#include "utilities/ticks.hpp"
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    33
#if INCLUDE_SERVICES
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    34
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    35
bool ObjectCountEventSender::should_send_event() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    36
#if INCLUDE_JFR
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    37
  return _should_send_requestable_event || EventObjectCountAfterGC::is_enabled();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    38
#else
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    39
  return false;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    40
#endif // INCLUDE_JFR
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    41
}
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    42
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    43
bool ObjectCountEventSender::_should_send_requestable_event = false;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    44
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    45
void ObjectCountEventSender::enable_requestable_event() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    46
  _should_send_requestable_event = true;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    47
}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    48
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    49
void ObjectCountEventSender::disable_requestable_event() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    50
  _should_send_requestable_event = false;
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    51
}
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    52
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    53
template <typename T>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    54
void ObjectCountEventSender::send_event_if_enabled(Klass* klass, jlong count, julong size, const Ticks& timestamp) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    55
  T event(UNTIMED);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    56
  if (event.should_commit()) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    57
    event.set_gcId(GCId::current());
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    58
    event.set_objectClass(klass);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    59
    event.set_count(count);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    60
    event.set_totalSize(size);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    61
    event.set_endtime(timestamp);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    62
    event.commit();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    63
  }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    64
}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    65
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    66
void ObjectCountEventSender::send(const KlassInfoEntry* entry, const Ticks& timestamp) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    67
  Klass* klass = entry->klass();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    68
  jlong count = entry->count();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    69
  julong total_size = entry->words() * BytesPerWord;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    70
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    71
  send_event_if_enabled<EventObjectCount>(klass, count, total_size, timestamp);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents: 47216
diff changeset
    72
  send_event_if_enabled<EventObjectCountAfterGC>(klass, count, total_size, timestamp);
18704
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    73
}
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    74
226ce98e75e6 8015972: Refactor the sending of the object count after GC event
ehelin
parents:
diff changeset
    75
#endif // INCLUDE_SERVICES