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

Unified Diff: content/renderer/render_view_impl.cc

Issue 2185823005: Make RenderViewImpl::OnForceRedraw more robust (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compilation again Created 4 years, 4 months 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 | « content/renderer/render_view_impl.h ('k') | content/test/layouttest_support.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_view_impl.cc
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 6dc7c39ebc02fec92fc76226a385b827175144b4..73b0a4c5fc009cea09dd10b23d79318381f7d1ab 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -631,6 +631,36 @@ GetV8CacheStrategiesForCacheStorage() {
}
}
+// This class represents promise which is robust to (will not be broken by)
+// |DidNotSwapReason::SWAP_FAILS| events.
+class AlwaysDrawSwapPromise : public cc::SwapPromise {
+ public:
+ explicit AlwaysDrawSwapPromise(const ui::LatencyInfo& latency_info)
+ : latency_info_(latency_info) {}
+
+ ~AlwaysDrawSwapPromise() override = default;
+
+ void DidActivate() override {}
+
+ void DidSwap(cc::CompositorFrameMetadata* metadata) override {
+ DCHECK(!latency_info_.terminated());
+ metadata->latency_info.push_back(latency_info_);
+ }
+
+ DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
+ return reason == DidNotSwapReason::SWAP_FAILS
+ ? DidNotSwapAction::KEEP_ACTIVE
+ : DidNotSwapAction::BREAK_PROMISE;
+ }
+
+ void OnCommit() override {}
+
+ int64_t TraceId() const override { return latency_info_.trace_id(); }
+
+ private:
+ ui::LatencyInfo latency_info_;
+};
+
} // namespace
RenderViewImpl::RenderViewImpl(CompositorDependencies* compositor_deps,
@@ -1466,17 +1496,10 @@ void RenderViewImpl::ApplyWebPreferencesInternal(
ApplyWebPreferences(prefs, web_view);
}
-void RenderViewImpl::OnForceRedraw(int id) {
- ui::LatencyInfo latency_info;
- if (id) {
- latency_info.AddLatencyNumber(ui::WINDOW_SNAPSHOT_FRAME_NUMBER_COMPONENT,
- 0,
- id);
- }
- std::unique_ptr<cc::SwapPromiseMonitor> latency_info_swap_promise_monitor;
+void RenderViewImpl::OnForceRedraw(const ui::LatencyInfo& latency_info) {
if (RenderWidgetCompositor* rwc = compositor()) {
- latency_info_swap_promise_monitor =
- rwc->CreateLatencyInfoSwapPromiseMonitor(&latency_info);
+ rwc->QueueSwapPromise(
+ base::MakeUnique<AlwaysDrawSwapPromise>(latency_info));
}
ScheduleCompositeWithForcedRedraw();
}
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | content/test/layouttest_support.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698