Commit 995baabe authored by Adam Raine's avatar Adam Raine Committed by Commit Bot

Add compositor failure reasons to inspector trace.

Surfacing the composite failure reasons in the inspector
trace will allow Lighthouse to identify animations which
can cause jank during page load.

Bug: 230229
Change-Id: I40031189b3bb47f7bfa48ab2a7c06e40cd8c36c3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2283289
Commit-Queue: Adam Raine <asraine@google.com>
Reviewed-by: default avatarRobert Flack <flackr@chromium.org>
Reviewed-by: default avatarPaul Irish <paulirish@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790964}
parent 7382ce2f
...@@ -454,6 +454,11 @@ bool Animation::PreCommit( ...@@ -454,6 +454,11 @@ bool Animation::PreCommit(
} else { } else {
CancelIncompatibleAnimationsOnCompositor(); CancelIncompatibleAnimationsOnCompositor();
} }
DCHECK_EQ(kRunning, CalculateAnimationPlayState());
TRACE_EVENT_NESTABLE_ASYNC_INSTANT1(
"blink.animations,devtools.timeline,benchmark,rail", "Animation",
this, "data",
inspector_animation_compositor_event::Data(failure_reasons));
} }
} }
......
...@@ -1449,6 +1449,13 @@ std::unique_ptr<TracedValue> inspector_animation_state_event::Data( ...@@ -1449,6 +1449,13 @@ std::unique_ptr<TracedValue> inspector_animation_state_event::Data(
return value; return value;
} }
std::unique_ptr<TracedValue> inspector_animation_compositor_event::Data(
CompositorAnimations::FailureReasons failure_reasons) {
auto value = std::make_unique<TracedValue>();
value->SetInteger("compositeFailed", failure_reasons);
return value;
}
std::unique_ptr<TracedValue> inspector_hit_test_event::EndData( std::unique_ptr<TracedValue> inspector_hit_test_event::EndData(
const HitTestRequest& request, const HitTestRequest& request,
const HitTestLocation& location, const HitTestLocation& location,
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "third_party/blink/renderer/bindings/core/v8/script_streamer.h" #include "third_party/blink/renderer/bindings/core/v8/script_streamer.h"
#include "third_party/blink/renderer/core/animation/compositor_animations.h"
#include "third_party/blink/renderer/core/core_export.h" #include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/core_probe_sink.h" #include "third_party/blink/renderer/core/core_probe_sink.h"
#include "third_party/blink/renderer/core/css/css_selector.h" #include "third_party/blink/renderer/core/css/css_selector.h"
...@@ -486,6 +487,11 @@ namespace inspector_animation_state_event { ...@@ -486,6 +487,11 @@ namespace inspector_animation_state_event {
std::unique_ptr<TracedValue> Data(const Animation&); std::unique_ptr<TracedValue> Data(const Animation&);
} }
namespace inspector_animation_compositor_event {
std::unique_ptr<TracedValue> Data(
blink::CompositorAnimations::FailureReasons failure_reasons);
}
namespace inspector_hit_test_event { namespace inspector_hit_test_event {
std::unique_ptr<TracedValue> EndData(const HitTestRequest&, std::unique_ptr<TracedValue> EndData(const HitTestRequest&,
const HitTestLocation&, const HitTestLocation&,
......
Tests animation started and records composite failure reasons in trace event.
Recording started
Animation created
Animation started
Tracing complete
Name:Animation,Phase:b
Name:Animation,Phase:n
Name:Animation,Phase:n
Name:Animation,Phase:e
Animation composite failed reasons: 8225
(async function(testRunner) {
var {page, session, dp} = await testRunner.startHTML(`
<div id='node' style='background-color: red; height: 100px'></div>
`, 'Tests animation started and records composite failure reasons in trace event.');
var TracingHelper = await testRunner.loadScript('../resources/tracing-test.js');
var tracingHelper = new TracingHelper(testRunner, session);
dp.Animation.enable();
await tracingHelper.startTracing();
session.evaluate(`var animation = node.animate([{ width: '100px' }, { width: '200px' }], 500);`);
await dp.Animation.onceAnimationCreated();
testRunner.log('Animation created');
await dp.Animation.onceAnimationStarted();
testRunner.log('Animation started');
session.evaluate(`animation.cancel()`);
await dp.Animation.onceAnimationCanceled();
await tracingHelper.stopTracing();
var animationEvents = tracingHelper.filterEvents(e => e.name === 'Animation');
animationEvents.forEach(e => testRunner.log(`Name:${e.name},Phase:${e.ph}`));
var animation = animationEvents[1];
testRunner.log('Animation composite failed reasons: ' + animation.args.data.compositeFailed);
testRunner.completeTest();
})
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