Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(372)

Unified Diff: third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js

Issue 2515693003: DevTools: bring violations and timeline warnings in sync. (Closed)
Patch Set: idle callback test fixed. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineFrameModel.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
index c193346d8562b595e766cb362e6d9e64dbb9488e..911a3f1faf4532ba48cc9fe89d64a052c393bda2 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineModel.js
@@ -644,6 +644,21 @@ TimelineModel.TimelineModel = class {
var recordTypes = TimelineModel.TimelineModel.RecordType;
+ if (!eventStack.length) {
+ if (this._currentTaskLayoutAndRecalcEvents && this._currentTaskLayoutAndRecalcEvents.length) {
+ var totalTime = this._currentTaskLayoutAndRecalcEvents.reduce((time, event) => time + event.duration, 0);
+ if (totalTime > TimelineModel.TimelineModel.Thresholds.ForcedLayout) {
+ for (var e of this._currentTaskLayoutAndRecalcEvents) {
+ let timelineData = TimelineModel.TimelineData.forEvent(e);
+ timelineData.warning = e.name === recordTypes.Layout ?
+ TimelineModel.TimelineModel.WarningType.ForcedLayout :
+ TimelineModel.TimelineModel.WarningType.ForcedStyle;
+ }
+ }
+ }
+ this._currentTaskLayoutAndRecalcEvents = [];
+ }
+
if (this._currentScriptEvent && event.startTime > this._currentScriptEvent.endTime)
this._currentScriptEvent = null;
@@ -682,7 +697,7 @@ TimelineModel.TimelineModel = class {
timelineData.setInitiator(this._lastScheduleStyleRecalculation[event.args['beginData']['frame']]);
this._lastRecalculateStylesEvent = event;
if (this._currentScriptEvent)
- timelineData.warning = TimelineModel.TimelineModel.WarningType.ForcedStyle;
+ this._currentTaskLayoutAndRecalcEvents.push(event);
break;
case recordTypes.ScheduleStyleInvalidationTracking:
@@ -715,7 +730,18 @@ TimelineModel.TimelineModel = class {
timelineData.backendNodeId = event.args['endData']['rootNode'];
this._layoutInvalidate[frameId] = null;
if (this._currentScriptEvent)
- timelineData.warning = TimelineModel.TimelineModel.WarningType.ForcedLayout;
+ this._currentTaskLayoutAndRecalcEvents.push(event);
+ break;
+
+ case recordTypes.EventDispatch:
+ if (event.duration > TimelineModel.TimelineModel.Thresholds.RecurringHandler)
+ timelineData.warning = TimelineModel.TimelineModel.WarningType.LongHandler;
+ break;
+
+ case recordTypes.TimerFire:
+ case recordTypes.FireAnimationFrame:
+ if (event.duration > TimelineModel.TimelineModel.Thresholds.RecurringHandler)
+ timelineData.warning = TimelineModel.TimelineModel.WarningType.LongRecurringHandler;
break;
case recordTypes.FunctionCall:
@@ -724,14 +750,18 @@ TimelineModel.TimelineModel = class {
eventData['url'] = eventData['scriptName'];
if (typeof eventData['scriptLine'] === 'number')
eventData['lineNumber'] = eventData['scriptLine'];
+
// Fallthrough.
+
case recordTypes.EvaluateScript:
case recordTypes.CompileScript:
if (typeof eventData['lineNumber'] === 'number')
--eventData['lineNumber'];
if (typeof eventData['columnNumber'] === 'number')
--eventData['columnNumber'];
+
// Fallthrough intended.
+
case recordTypes.RunMicrotasks:
// Microtasks technically are not necessarily scripts, but for purpose of
// forced sync style recalc or layout detection they are.
@@ -828,9 +858,9 @@ TimelineModel.TimelineModel = class {
break;
case recordTypes.FireIdleCallback:
- if (event.duration > eventData['allottedMilliseconds'])
+ if (event.duration >
+ eventData['allottedMilliseconds'] + TimelineModel.TimelineModel.Thresholds.IdleCallbackAddon)
timelineData.warning = TimelineModel.TimelineModel.WarningType.IdleDeadlineExceeded;
-
break;
}
if (SDK.TracingModel.isAsyncPhase(event.phase))
@@ -1250,6 +1280,8 @@ TimelineModel.TimelineModel.WarningType = {
ForcedStyle: 'ForcedStyle',
ForcedLayout: 'ForcedLayout',
IdleDeadlineExceeded: 'IdleDeadlineExceeded',
+ LongHandler: 'LongHandler',
+ LongRecurringHandler: 'LongRecurringHandler',
V8Deopt: 'V8Deopt'
};
@@ -1274,6 +1306,13 @@ TimelineModel.TimelineModel.DevToolsMetadataEvent = {
TracingSessionIdForWorker: 'TracingSessionIdForWorker',
};
+TimelineModel.TimelineModel.Thresholds = {
+ Handler: 150,
+ RecurringHandler: 50,
+ ForcedLayout: 30,
+ IdleCallbackAddon: 5
+};
+
/**
* @unrestricted
*/
« no previous file with comments | « third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineFrameModel.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698