< prev index next >

src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp

Print this page
rev 7854 : imported patch 8027962-per-phase-timing-measurements-for-strong-roots-processing
rev 7855 : [mq]: 8027962-bengt-suggestions

*** 1,7 **** /* ! * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 105,122 **** --- 105,143 ---- _average = (double)_sum / (double)_length; _has_new_data = false; } }; + class GCPhaseTimeData : public PhaseTimeData { + private: + WorkerDataArray<double>** _data; + uint _num_phases; + uint _worker_id; + public: + GCPhaseTimeData(WorkerDataArray<double>** data, uint num_phases, uint worker_id) : + _data(data), _num_phases(num_phases), _worker_id(worker_id) { } + + virtual bool active() const { return _num_phases > 0; } + + virtual void set_value(uint phase, double value) { + assert(_data != NULL, "just checking"); + _data[phase]->set(_worker_id, value); + } + }; + class G1GCPhaseTimes : public CHeapObj<mtGC> { private: uint _active_gc_threads; uint _max_gc_threads; + uint _num_ext_root_scan_phases; + + bool track_ext_root_scan_phases() const { return _num_ext_root_scan_phases > 0; } WorkerDataArray<double> _last_gc_worker_start_times_ms; WorkerDataArray<double> _last_ext_root_scan_times_ms; + WorkerDataArray<double>** _last_ext_root_scan_phase_times_ms; WorkerDataArray<double> _last_satb_filtering_times_ms; WorkerDataArray<double> _last_update_rs_times_ms; WorkerDataArray<int> _last_update_rs_processed_buffers; WorkerDataArray<double> _last_scan_rs_times_ms; WorkerDataArray<double> _last_strong_code_root_scan_times_ms;
*** 169,179 **** void print_stats(int level, const char* str, double value); void print_stats(int level, const char* str, size_t value); void print_stats(int level, const char* str, double value, uint workers); public: ! G1GCPhaseTimes(uint max_gc_threads); void note_gc_start(uint active_gc_threads); void note_gc_end(); void print(double pause_time_sec); void record_gc_worker_start_time(uint worker_i, double ms) { --- 190,205 ---- void print_stats(int level, const char* str, double value); void print_stats(int level, const char* str, size_t value); void print_stats(int level, const char* str, double value, uint workers); public: ! G1GCPhaseTimes(uint max_gc_threads, uint num_ext_root_scan_phases); ! virtual ~G1GCPhaseTimes(); ! ! WorkerDataArray<double>** get_ext_root_scan_phase_times() const { return _last_ext_root_scan_phase_times_ms; } ! uint num_ext_root_scan_phases() const { return _num_ext_root_scan_phases; } ! void note_gc_start(uint active_gc_threads); void note_gc_end(); void print(double pause_time_sec); void record_gc_worker_start_time(uint worker_i, double ms) {
< prev index next >