Commit 8bf89c2f authored by Keishi Hattori's avatar Keishi Hattori Committed by Commit Bot

Fix devtools.timeline DOM GC slices

DOM GC slices in devtools performance pane broke when we renamed the events.
This CL
- reenables DOM GC slices
- reduce DOM GC to only the atomic phase, in line with V8 GC
- enable IncrementalMarking* slices by default

Bug: None
Change-Id: Ib5261ab6069d017b65b78de72315e95cc242b9d3
Reviewed-on: https://chromium-review.googlesource.com/1154863
Commit-Queue: Keishi Hattori <keishi@chromium.org>
Reviewed-by: default avatarAlexei Filippov <alph@chromium.org>
Reviewed-by: default avatarMichael Lippautz <mlippautz@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582144}
parent 949105c9
Tests the Timeline API instrumentation of a DOM GC event
SUCCESS: Found expected Blink GC event record
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(
`Tests the Timeline API instrumentation of a DOM GC event\n`);
await TestRunner.loadModule('performance_test_runner');
await TestRunner.showPanel('timeline');
await TestRunner.evaluateInPagePromise(`
function produceGarbageForGCEvents()
{
window.gc();
return new Promise(fulfill => testRunner.layoutAndPaintAsyncThen(fulfill));
}
`);
await PerformanceTestRunner.invokeAsyncWithTimeline(
'produceGarbageForGCEvents');
const gcEvent = PerformanceTestRunner.findTimelineEvent(
TimelineModel.TimelineModel.RecordType.GCCollectGarbage);
if (gcEvent)
TestRunner.addResult('SUCCESS: Found expected Blink GC event record');
else
TestRunner.addResult(`FAIL: Blink GC event record wasn't found`);
TestRunner.completeTest();
})();
...@@ -179,10 +179,6 @@ Timeline.TimelineUIUtils = class { ...@@ -179,10 +179,6 @@ Timeline.TimelineUIUtils = class {
eventStyles[recordTypes.LatencyInfo] = eventStyles[recordTypes.LatencyInfo] =
new Timeline.TimelineRecordStyle(Common.UIString('Input Latency'), categories['scripting']); new Timeline.TimelineRecordStyle(Common.UIString('Input Latency'), categories['scripting']);
eventStyles[recordTypes.GCIdleLazySweep] =
new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']);
eventStyles[recordTypes.GCCompleteSweep] =
new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']);
eventStyles[recordTypes.GCCollectGarbage] = eventStyles[recordTypes.GCCollectGarbage] =
new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']); new Timeline.TimelineRecordStyle(Common.UIString('DOM GC'), categories['scripting']);
...@@ -604,18 +600,6 @@ Timeline.TimelineUIUtils = class { ...@@ -604,18 +600,6 @@ Timeline.TimelineUIUtils = class {
detailsText = eventData && eventData['name']; detailsText = eventData && eventData['name'];
break; break;
case recordType.GCIdleLazySweep:
detailsText = Common.UIString('idle sweep');
break;
case recordType.GCCompleteSweep:
detailsText = Common.UIString('complete sweep');
break;
case recordType.GCCollectGarbage:
detailsText = Common.UIString('collect');
break;
case recordType.AsyncTask: case recordType.AsyncTask:
detailsText = eventData ? eventData['name'] : null; detailsText = eventData ? eventData['name'] : null;
break; break;
...@@ -688,9 +672,6 @@ Timeline.TimelineUIUtils = class { ...@@ -688,9 +672,6 @@ Timeline.TimelineUIUtils = class {
case recordType.WebSocketSendHandshakeRequest: case recordType.WebSocketSendHandshakeRequest:
case recordType.WebSocketReceiveHandshakeResponse: case recordType.WebSocketReceiveHandshakeResponse:
case recordType.WebSocketDestroy: case recordType.WebSocketDestroy:
case recordType.GCIdleLazySweep:
case recordType.GCCompleteSweep:
case recordType.GCCollectGarbage:
detailsText = Timeline.TimelineUIUtils.buildDetailsTextForTraceEvent(event, target); detailsText = Timeline.TimelineUIUtils.buildDetailsTextForTraceEvent(event, target);
break; break;
case recordType.PaintImage: case recordType.PaintImage:
......
...@@ -1275,9 +1275,7 @@ TimelineModel.TimelineModel.RecordType = { ...@@ -1275,9 +1275,7 @@ TimelineModel.TimelineModel.RecordType = {
InputLatencyMouseMove: 'InputLatency::MouseMove', InputLatencyMouseMove: 'InputLatency::MouseMove',
InputLatencyMouseWheel: 'InputLatency::MouseWheel', InputLatencyMouseWheel: 'InputLatency::MouseWheel',
ImplSideFling: 'InputHandlerProxy::HandleGestureFling::started', ImplSideFling: 'InputHandlerProxy::HandleGestureFling::started',
GCIdleLazySweep: 'ThreadState::performIdleLazySweep', GCCollectGarbage: 'BlinkGC.AtomicPhase',
GCCompleteSweep: 'ThreadState::completeSweep',
GCCollectGarbage: 'BlinkGCMarking',
CryptoDoEncrypt: 'DoEncrypt', CryptoDoEncrypt: 'DoEncrypt',
CryptoDoEncryptReply: 'DoEncryptReply', CryptoDoEncryptReply: 'DoEncryptReply',
......
...@@ -99,14 +99,11 @@ class PLATFORM_EXPORT ThreadHeapStatsCollector { ...@@ -99,14 +99,11 @@ class PLATFORM_EXPORT ThreadHeapStatsCollector {
static constexpr int kNumScopeIds = kLastScopeId + 1; static constexpr int kNumScopeIds = kLastScopeId + 1;
enum TraceDefaultBehavior { enum TraceCategory { kEnabled, kDisabled, kDevTools };
kEnabled,
kDisabled,
};
// Trace a particular scope. Will emit a trace event and record the time in // Trace a particular scope. Will emit a trace event and record the time in
// the corresponding ThreadHeapStatsCollector. // the corresponding ThreadHeapStatsCollector.
template <TraceDefaultBehavior default_behavior = kDisabled> template <TraceCategory trace_category = kDisabled>
class PLATFORM_EXPORT InternalScope { class PLATFORM_EXPORT InternalScope {
DISALLOW_NEW(); DISALLOW_NEW();
DISALLOW_COPY_AND_ASSIGN(InternalScope); DISALLOW_COPY_AND_ASSIGN(InternalScope);
...@@ -125,9 +122,14 @@ class PLATFORM_EXPORT ThreadHeapStatsCollector { ...@@ -125,9 +122,14 @@ class PLATFORM_EXPORT ThreadHeapStatsCollector {
private: private:
constexpr static const char* TraceCategory() { constexpr static const char* TraceCategory() {
return default_behavior == kEnabled switch (trace_category) {
? "blink_gc" case kEnabled:
: TRACE_DISABLED_BY_DEFAULT("blink_gc"); return "blink_gc";
case kDisabled:
return TRACE_DISABLED_BY_DEFAULT("blink_gc");
case kDevTools:
return "blink_gc,devtools.timeline";
}
} }
void StartTrace() { TRACE_EVENT_BEGIN0(TraceCategory(), ToString(id_)); } void StartTrace() { TRACE_EVENT_BEGIN0(TraceCategory(), ToString(id_)); }
...@@ -149,6 +151,7 @@ class PLATFORM_EXPORT ThreadHeapStatsCollector { ...@@ -149,6 +151,7 @@ class PLATFORM_EXPORT ThreadHeapStatsCollector {
using Scope = InternalScope<kDisabled>; using Scope = InternalScope<kDisabled>;
using EnabledScope = InternalScope<kEnabled>; using EnabledScope = InternalScope<kEnabled>;
using DevToolsScope = InternalScope<kDevTools>;
// POD to hold interesting data accumulated during a garbage collection cycle. // POD to hold interesting data accumulated during a garbage collection cycle.
// The event is always fully polulated when looking at previous events but // The event is always fully polulated when looking at previous events but
......
...@@ -1453,7 +1453,7 @@ void ThreadState::IncrementalMarkingStart(BlinkGC::GCReason reason) { ...@@ -1453,7 +1453,7 @@ void ThreadState::IncrementalMarkingStart(BlinkGC::GCReason reason) {
CompleteSweep(); CompleteSweep();
Heap().stats_collector()->NotifyMarkingStarted(reason); Heap().stats_collector()->NotifyMarkingStarted(reason);
{ {
ThreadHeapStatsCollector::Scope stats_scope( ThreadHeapStatsCollector::EnabledScope stats_scope(
Heap().stats_collector(), Heap().stats_collector(),
ThreadHeapStatsCollector::kIncrementalMarkingStartMarking, "reason", ThreadHeapStatsCollector::kIncrementalMarkingStartMarking, "reason",
GcReasonString(reason)); GcReasonString(reason));
...@@ -1471,7 +1471,7 @@ void ThreadState::IncrementalMarkingStart(BlinkGC::GCReason reason) { ...@@ -1471,7 +1471,7 @@ void ThreadState::IncrementalMarkingStart(BlinkGC::GCReason reason) {
} }
void ThreadState::IncrementalMarkingStep() { void ThreadState::IncrementalMarkingStep() {
ThreadHeapStatsCollector::Scope stats_scope( ThreadHeapStatsCollector::EnabledScope stats_scope(
Heap().stats_collector(), Heap().stats_collector(),
ThreadHeapStatsCollector::kIncrementalMarkingStep); ThreadHeapStatsCollector::kIncrementalMarkingStep);
VLOG(2) << "[state:" << this << "] " VLOG(2) << "[state:" << this << "] "
...@@ -1488,7 +1488,7 @@ void ThreadState::IncrementalMarkingStep() { ...@@ -1488,7 +1488,7 @@ void ThreadState::IncrementalMarkingStep() {
} }
void ThreadState::IncrementalMarkingFinalize() { void ThreadState::IncrementalMarkingFinalize() {
ThreadHeapStatsCollector::Scope stats_scope( ThreadHeapStatsCollector::EnabledScope stats_scope(
Heap().stats_collector(), Heap().stats_collector(),
ThreadHeapStatsCollector::kIncrementalMarkingFinalize); ThreadHeapStatsCollector::kIncrementalMarkingFinalize);
VLOG(2) << "[state:" << this << "] " VLOG(2) << "[state:" << this << "] "
...@@ -1577,7 +1577,7 @@ void ThreadState::RunAtomicPause(BlinkGC::StackState stack_state, ...@@ -1577,7 +1577,7 @@ void ThreadState::RunAtomicPause(BlinkGC::StackState stack_state,
BlinkGC::SweepingType sweeping_type, BlinkGC::SweepingType sweeping_type,
BlinkGC::GCReason reason) { BlinkGC::GCReason reason) {
{ {
ThreadHeapStatsCollector::EnabledScope stats1( ThreadHeapStatsCollector::DevToolsScope stats1(
Heap().stats_collector(), ThreadHeapStatsCollector::kAtomicPhase); Heap().stats_collector(), ThreadHeapStatsCollector::kAtomicPhase);
AtomicPauseScope atomic_pause_scope(this); AtomicPauseScope atomic_pause_scope(this);
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment