Render to Browser metadata via SwapPromise
Prototype of using classic IPC for QueueMessageSwapPromise to notify the browser
of metadata. Keeps viz layer free of this information/dependency.
Bug: 857695
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I194c0ef362d261c4c8fe362196362d7bbf3298ce
Reviewed-on: https://chromium-review.googlesource.com/860994
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Reviewed-by: Fady Samuel <fsamuel@chromium.org>
Commit-Queue: Jonathan Ross <jonross@chromium.org>
Cr-Commit-Position: refs/heads/master@{#528967}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 300b84b..0ea429b9 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -321,6 +321,8 @@
"trees/proxy_impl.h",
"trees/proxy_main.cc",
"trees/proxy_main.h",
+ "trees/render_frame_metadata.cc",
+ "trees/render_frame_metadata.h",
"trees/scoped_abort_remaining_swap_promises.h",
"trees/scroll_node.cc",
"trees/scroll_node.h",
diff --git a/cc/ipc/cc_param_traits_macros.h b/cc/ipc/cc_param_traits_macros.h
index a14d36a..b3ffc93 100644
--- a/cc/ipc/cc_param_traits_macros.h
+++ b/cc/ipc/cc_param_traits_macros.h
@@ -6,6 +6,7 @@
#define CC_IPC_CC_PARAM_TRAITS_MACROS_H_
#include "cc/paint/filter_operation.h"
+#include "cc/trees/render_frame_metadata.h"
#include "components/viz/common/frame_sinks/begin_frame_args.h"
#include "components/viz/common/quads/compositor_frame.h"
#include "components/viz/common/quads/debug_border_draw_quad.h"
@@ -208,4 +209,8 @@
IPC_STRUCT_TRAITS_MEMBER(frame_token)
IPC_STRUCT_TRAITS_END()
+IPC_STRUCT_TRAITS_BEGIN(cc::RenderFrameMetadata)
+ IPC_STRUCT_TRAITS_MEMBER(root_scroll_offset)
+IPC_STRUCT_TRAITS_END()
+
#endif // CC_IPC_CC_PARAM_TRAITS_MACROS_H_
diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc
index f5a04dc..341ce70 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -32,7 +32,8 @@
private:
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) override {}
void DidSwap() override {
main_task_runner_->PostTask(FROM_HERE, reference_returner_);
diff --git a/cc/trees/latency_info_swap_promise.cc b/cc/trees/latency_info_swap_promise.cc
index 3dcaf1e..2caa840 100644
--- a/cc/trees/latency_info_swap_promise.cc
+++ b/cc/trees/latency_info_swap_promise.cc
@@ -33,9 +33,11 @@
LatencyInfoSwapPromise::~LatencyInfoSwapPromise() = default;
-void LatencyInfoSwapPromise::WillSwap(viz::CompositorFrameMetadata* metadata) {
+void LatencyInfoSwapPromise::WillSwap(
+ viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) {
DCHECK(!latency_.terminated());
- metadata->latency_info.push_back(latency_);
+ compositor_frame_metadata->latency_info.push_back(latency_);
}
void LatencyInfoSwapPromise::DidSwap() {}
diff --git a/cc/trees/latency_info_swap_promise.h b/cc/trees/latency_info_swap_promise.h
index 2b23d67..62a80777 100644
--- a/cc/trees/latency_info_swap_promise.h
+++ b/cc/trees/latency_info_swap_promise.h
@@ -19,7 +19,8 @@
~LatencyInfoSwapPromise() override;
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override;
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) override;
void DidSwap() override;
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
void OnCommit() override;
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index ad17e57..97214d7 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -71,6 +71,7 @@
#include "cc/trees/layer_tree_host_common.h"
#include "cc/trees/layer_tree_impl.h"
#include "cc/trees/mutator_host.h"
+#include "cc/trees/render_frame_metadata.h"
#include "cc/trees/scroll_node.h"
#include "cc/trees/single_thread_proxy.h"
#include "cc/trees/transform_node.h"
@@ -1801,6 +1802,13 @@
return metadata;
}
+RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata() {
+ RenderFrameMetadata metadata;
+ metadata.root_scroll_offset =
+ gfx::ScrollOffsetToVector2dF(active_tree_->TotalScrollOffset());
+ return metadata;
+}
+
bool LayerTreeHostImpl::DrawLayers(FrameData* frame) {
DCHECK(CanDraw());
DCHECK_EQ(frame->has_no_damage, frame->render_passes.empty());
@@ -1866,7 +1874,9 @@
metadata.may_contain_video = frame->may_contain_video;
metadata.activation_dependencies = std::move(frame->activation_dependencies);
- active_tree()->FinishSwapPromises(&metadata);
+ RenderFrameMetadata render_frame_metadata = MakeRenderFrameMetadata();
+
+ active_tree()->FinishSwapPromises(&metadata, &render_frame_metadata);
metadata.latency_info.emplace_back(ui::SourceEventType::FRAME);
ui::LatencyInfo& new_latency_info = metadata.latency_info.back();
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 83356aa..db20a2f 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -74,6 +74,7 @@
class PendingTreeRasterDurationHistogramTimer;
class RasterTilePriorityQueue;
class RasterBufferProvider;
+class RenderFrameMetadata;
class RenderingStatsInstrumentation;
class ResourcePool;
class ScrollElasticityHelper;
@@ -573,6 +574,7 @@
void ScheduleMicroBenchmark(std::unique_ptr<MicroBenchmarkImpl> benchmark);
viz::CompositorFrameMetadata MakeCompositorFrameMetadata();
+ RenderFrameMetadata MakeRenderFrameMetadata();
// Viewport rectangle and clip in device space. These rects are used to
// prioritize raster and determine what is submitted in a CompositorFrame.
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 6018511..f592f7e0 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -4927,7 +4927,8 @@
result_->did_activate_called = true;
}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override {
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) override {
base::AutoLock lock(result_->lock);
EXPECT_FALSE(result_->did_swap_called);
EXPECT_FALSE(result_->did_not_swap_called);
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 2d65a6b..46b0ad5 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -1585,11 +1585,13 @@
new_swap_promises.clear();
}
-void LayerTreeImpl::FinishSwapPromises(viz::CompositorFrameMetadata* metadata) {
+void LayerTreeImpl::FinishSwapPromises(
+ viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) {
for (const auto& swap_promise : swap_promise_list_)
- swap_promise->WillSwap(metadata);
+ swap_promise->WillSwap(compositor_frame_metadata, render_frame_metadata);
for (const auto& swap_promise : pinned_swap_promise_list_)
- swap_promise->WillSwap(metadata);
+ swap_promise->WillSwap(compositor_frame_metadata, render_frame_metadata);
}
void LayerTreeImpl::ClearSwapPromises() {
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
index 90091ab..e3848ff 100644
--- a/cc/trees/layer_tree_impl.h
+++ b/cc/trees/layer_tree_impl.h
@@ -48,6 +48,7 @@
class LayerTreeSettings;
class MemoryHistory;
class PictureLayerImpl;
+class RenderFrameMetadata;
class TaskRunnerProvider;
class TileManager;
class UIResourceRequest;
@@ -443,7 +444,9 @@
std::vector<std::unique_ptr<SwapPromise>> new_swap_promises);
void AppendSwapPromises(
std::vector<std::unique_ptr<SwapPromise>> new_swap_promises);
- void FinishSwapPromises(viz::CompositorFrameMetadata* metadata);
+ void FinishSwapPromises(
+ viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata);
void ClearSwapPromises();
void BreakSwapPromises(SwapPromise::DidNotSwapReason reason);
diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc
index 2be267a9..38029c53 100644
--- a/cc/trees/layer_tree_impl_unittest.cc
+++ b/cc/trees/layer_tree_impl_unittest.cc
@@ -2285,7 +2285,9 @@
~PersistentSwapPromise() override = default;
void DidActivate() override {}
- MOCK_METHOD1(WillSwap, void(viz::CompositorFrameMetadata* metadata));
+ MOCK_METHOD2(WillSwap,
+ void(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata));
MOCK_METHOD0(DidSwap, void());
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
@@ -2304,7 +2306,8 @@
~NotPersistentSwapPromise() override = default;
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) override {}
void DidSwap() override {}
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
@@ -2342,9 +2345,9 @@
for (size_t i = 0; i < persistent_promises.size(); ++i) {
SCOPED_TRACE(testing::Message() << "While checking case #" << i);
ASSERT_TRUE(persistent_promises[i]);
- EXPECT_CALL(*persistent_promises[i], WillSwap(testing::_));
+ EXPECT_CALL(*persistent_promises[i], WillSwap(testing::_, testing::_));
}
- host_impl().active_tree()->FinishSwapPromises(nullptr);
+ host_impl().active_tree()->FinishSwapPromises(nullptr, nullptr);
}
TEST_F(LayerTreeImplTest, NotPersistentSwapPromisesAreDroppedWhenSwapFails) {
diff --git a/cc/trees/render_frame_metadata.cc b/cc/trees/render_frame_metadata.cc
new file mode 100644
index 0000000..191b28c4
--- /dev/null
+++ b/cc/trees/render_frame_metadata.cc
@@ -0,0 +1,24 @@
+// 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.
+
+#include "cc/trees/render_frame_metadata.h"
+
+namespace cc {
+
+RenderFrameMetadata::RenderFrameMetadata() = default;
+
+RenderFrameMetadata::RenderFrameMetadata(const RenderFrameMetadata& other) =
+ default;
+
+RenderFrameMetadata::RenderFrameMetadata(RenderFrameMetadata&& other) = default;
+
+RenderFrameMetadata::~RenderFrameMetadata() {}
+
+RenderFrameMetadata& RenderFrameMetadata::operator=(
+ const RenderFrameMetadata&) = default;
+
+RenderFrameMetadata& RenderFrameMetadata::operator=(
+ RenderFrameMetadata&& other) = default;
+
+} // namespace cc
diff --git a/cc/trees/render_frame_metadata.h b/cc/trees/render_frame_metadata.h
new file mode 100644
index 0000000..a5653103
--- /dev/null
+++ b/cc/trees/render_frame_metadata.h
@@ -0,0 +1,30 @@
+// 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.
+
+#ifndef CC_TREES_RENDER_FRAME_METADATA_H_
+#define CC_TREES_RENDER_FRAME_METADATA_H_
+
+#include "cc/cc_export.h"
+#include "ui/gfx/geometry/vector2d_f.h"
+
+namespace cc {
+
+class CC_EXPORT RenderFrameMetadata {
+ public:
+ RenderFrameMetadata();
+ RenderFrameMetadata(const RenderFrameMetadata& other);
+ RenderFrameMetadata(RenderFrameMetadata&& other);
+ ~RenderFrameMetadata();
+
+ RenderFrameMetadata& operator=(const RenderFrameMetadata&);
+ RenderFrameMetadata& operator=(RenderFrameMetadata&& other);
+
+ // Scroll offset and scale of the root layer. This can be used for tasks
+ // like positioning windowed plugins.
+ gfx::Vector2dF root_scroll_offset;
+};
+
+} // namespace cc
+
+#endif // CC_TREES_RENDER_FRAME_METADATA_H_
diff --git a/cc/trees/swap_promise.h b/cc/trees/swap_promise.h
index 81ec7cd0..0ab6136 100644
--- a/cc/trees/swap_promise.h
+++ b/cc/trees/swap_promise.h
@@ -8,6 +8,7 @@
#include <stdint.h>
#include "cc/cc_export.h"
+#include "cc/trees/render_frame_metadata.h"
#include "components/viz/common/quads/compositor_frame_metadata.h"
namespace cc {
@@ -61,7 +62,8 @@
virtual ~SwapPromise() {}
virtual void DidActivate() = 0;
- virtual void WillSwap(viz::CompositorFrameMetadata* metadata) = 0;
+ virtual void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) = 0;
virtual void DidSwap() = 0;
// Return |KEEP_ACTIVE| if this promise should remain active (should not be
// broken by the owner).
diff --git a/cc/trees/swap_promise_manager_unittest.cc b/cc/trees/swap_promise_manager_unittest.cc
index 59bd0980..85bfa97 100644
--- a/cc/trees/swap_promise_manager_unittest.cc
+++ b/cc/trees/swap_promise_manager_unittest.cc
@@ -31,7 +31,8 @@
~MockSwapPromise() override = default;
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ RenderFrameMetadata* render_frame_metadata) override {}
void DidSwap() override {}
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
return DidNotSwapAction::BREAK_PROMISE;
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 16b5bfd..bc17a4a 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -31,6 +31,7 @@
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "cc/base/switches.h"
+#include "cc/trees/render_frame_metadata.h"
#include "components/viz/common/features.h"
#include "components/viz/common/quads/compositor_frame.h"
#include "components/viz/common/switches.h"
@@ -630,6 +631,8 @@
IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor)
IPC_MESSAGE_HANDLER(ViewHostMsg_FrameSwapMessages,
OnFrameSwapMessagesReceived)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_OnRenderFrameSubmitted,
+ OnRenderFrameMetadata)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -2919,4 +2922,9 @@
input_router_->ProgressFling(current_time);
}
+void RenderWidgetHostImpl::OnRenderFrameMetadata(
+ const cc::RenderFrameMetadata& metadata) {
+ last_render_frame_metadata_ = metadata;
+}
+
} // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 433ef3e0..ea9fa4f8 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -79,6 +79,7 @@
namespace cc {
struct BeginFrameAck;
+class RenderFrameMetadata;
} // namespace cc
namespace gfx {
@@ -801,6 +802,8 @@
uint32_t last_shared_bitmap_sequence_number) override;
void SetupInputRouter();
+ void OnRenderFrameMetadata(const cc::RenderFrameMetadata& metadata);
+
#if defined(OS_MACOSX)
device::mojom::WakeLock* GetWakeLock();
#endif
@@ -1019,6 +1022,7 @@
viz::mojom::CompositorFrameSinkClientPtr renderer_compositor_frame_sink_;
viz::CompositorFrameMetadata last_frame_metadata_;
+ cc::RenderFrameMetadata last_render_frame_metadata_;
// Last non-zero frame token received from the renderer. Any swap messsages
// having a token less than or equal to this value will be processed.
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 2e45c773..18173c81 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -768,6 +768,10 @@
// Sent in reply to ViewMsg_WaitForNextFrameForTests.
IPC_MESSAGE_ROUTED0(ViewHostMsg_WaitForNextFrameForTests_ACK)
+// Sent once a frame with new RenderFrameMetadata has been submitted.
+IPC_MESSAGE_ROUTED1(ViewHostMsg_OnRenderFrameSubmitted,
+ cc::RenderFrameMetadata /* metadata */)
+
// Acknowledges that a SelectWordAroundCaret completed with the specified
// result and adjustments to the selection offsets.
IPC_MESSAGE_ROUTED3(ViewHostMsg_SelectWordAroundCaretAck,
diff --git a/content/renderer/gpu/queue_message_swap_promise.cc b/content/renderer/gpu/queue_message_swap_promise.cc
index 4d4fa13..43d8fdf 100644
--- a/content/renderer/gpu/queue_message_swap_promise.cc
+++ b/content/renderer/gpu/queue_message_swap_promise.cc
@@ -44,7 +44,9 @@
// The OutputSurface will take care of the Drain+Send.
}
-void QueueMessageSwapPromise::WillSwap(viz::CompositorFrameMetadata* metadata) {
+void QueueMessageSwapPromise::WillSwap(
+ viz::CompositorFrameMetadata* compositor_frame_metadata,
+ cc::RenderFrameMetadata* render_frame_metadata) {
#if DCHECK_IS_ON()
DCHECK(!completed_);
#endif
@@ -55,12 +57,17 @@
send_message_scope = message_queue_->AcquireSendMessageScope();
std::vector<std::unique_ptr<IPC::Message>> messages;
message_queue_->DrainMessages(&messages);
+
+ messages.push_back(base::MakeUnique<ViewHostMsg_OnRenderFrameSubmitted>(
+ message_queue_->routing_id(), *render_frame_metadata));
+
std::vector<IPC::Message> messages_to_send;
FrameSwapMessageQueue::TransferMessages(&messages, &messages_to_send);
if (!messages_to_send.empty()) {
- metadata->frame_token = message_queue_->AllocateFrameToken();
+ compositor_frame_metadata->frame_token =
+ message_queue_->AllocateFrameToken();
message_sender_->Send(new ViewHostMsg_FrameSwapMessages(
- message_queue_->routing_id(), metadata->frame_token,
+ message_queue_->routing_id(), compositor_frame_metadata->frame_token,
messages_to_send));
}
}
diff --git a/content/renderer/gpu/queue_message_swap_promise.h b/content/renderer/gpu/queue_message_swap_promise.h
index f888f2f..074337f 100644
--- a/content/renderer/gpu/queue_message_swap_promise.h
+++ b/content/renderer/gpu/queue_message_swap_promise.h
@@ -8,6 +8,7 @@
#include <stdint.h>
#include "base/memory/ref_counted.h"
+#include "cc/trees/render_frame_metadata.h"
#include "cc/trees/swap_promise.h"
namespace IPC {
@@ -27,7 +28,8 @@
~QueueMessageSwapPromise() override;
void DidActivate() override;
- void WillSwap(viz::CompositorFrameMetadata* metadata) override;
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ cc::RenderFrameMetadata* render_frame_metadata) override;
void DidSwap() override;
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
diff --git a/content/renderer/gpu/queue_message_swap_promise_unittest.cc b/content/renderer/gpu/queue_message_swap_promise_unittest.cc
index 42020a9..4929bd45 100644
--- a/content/renderer/gpu/queue_message_swap_promise_unittest.cc
+++ b/content/renderer/gpu/queue_message_swap_promise_unittest.cc
@@ -12,6 +12,7 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/test/scoped_task_environment.h"
+#include "cc/trees/render_frame_metadata.h"
#include "cc/trees/swap_promise.h"
#include "content/common/view_messages.h"
#include "content/renderer/gpu/frame_swap_message_queue.h"
@@ -145,7 +146,8 @@
for (const auto& promise : promises_) {
if (promise.get()) {
promise->DidActivate();
- promise->WillSwap(&dummy_metadata_);
+ promise->WillSwap(&dummy_compositor_frame_metadata_,
+ &dummy_render_frame_metadata_);
promise->DidSwap();
}
}
@@ -160,7 +162,8 @@
scoped_refptr<TestSyncMessageFilter> sync_message_filter_;
std::vector<IPC::Message> messages_;
std::vector<std::unique_ptr<cc::SwapPromise>> promises_;
- viz::CompositorFrameMetadata dummy_metadata_;
+ viz::CompositorFrameMetadata dummy_compositor_frame_metadata_;
+ cc::RenderFrameMetadata dummy_render_frame_metadata_;
private:
std::vector<std::unique_ptr<IPC::Message>> next_swap_messages_;
@@ -177,7 +180,8 @@
ASSERT_TRUE(promises_[0].get());
promises_[0]->DidActivate();
- promises_[0]->WillSwap(&dummy_metadata_);
+ promises_[0]->WillSwap(&dummy_compositor_frame_metadata_,
+ &dummy_render_frame_metadata_);
promises_[0]->DidSwap();
EXPECT_TRUE(DirectSendMessages().empty());
@@ -282,12 +286,13 @@
QueueMessages(data, arraysize(data));
promises_[0]->DidActivate();
- promises_[0]->WillSwap(&dummy_metadata_);
+ promises_[0]->WillSwap(&dummy_compositor_frame_metadata_,
+ &dummy_render_frame_metadata_);
promises_[0]->DidSwap();
ASSERT_FALSE(promises_[1].get());
std::vector<std::unique_ptr<IPC::Message>> messages;
messages.swap(LastSwapMessages());
- EXPECT_EQ(2u, messages.size());
+ EXPECT_EQ(3u, messages.size());
EXPECT_TRUE(ContainsMessage(messages, messages_[0]));
EXPECT_TRUE(ContainsMessage(messages, messages_[1]));
EXPECT_FALSE(ContainsMessage(messages, messages_[2]));
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index cebf457..31c83a4c 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -112,7 +112,8 @@
~ReportTimeSwapPromise() override;
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ cc::RenderFrameMetadata* render_frame_metadata) override {}
void DidSwap() override;
DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index c1409183..09459d2 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -451,9 +451,10 @@
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata* metadata) override {
+ void WillSwap(viz::CompositorFrameMetadata* compositor_frame_metadata,
+ cc::RenderFrameMetadata* render_frame_metadata) override {
DCHECK(!latency_info_.terminated());
- metadata->latency_info.push_back(latency_info_);
+ compositor_frame_metadata->latency_info.push_back(latency_info_);
}
void DidSwap() override {}
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index 4f00036..1814b99 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -286,7 +286,8 @@
DCHECK(layer_tree_frame_sink_from_commit_);
}
void DidActivate() override {}
- void WillSwap(viz::CompositorFrameMetadata*) override {
+ void WillSwap(viz::CompositorFrameMetadata*,
+ cc::RenderFrameMetadata*) override {
layer_tree_frame_sink_from_commit_->RequestCopyOfOutput(
std::move(copy_request_));
}