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

Unified Diff: content/renderer/gpu/render_widget_compositor.cc

Issue 2835763002: Use swap-promise to improve first* paint times (Closed)
Patch Set: address nit Created 3 years, 7 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/gpu/render_widget_compositor.h ('k') | third_party/WebKit/Source/core/paint/PaintTiming.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/gpu/render_widget_compositor.cc
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index b6c7631c744cd0d7965191fd7105db39b4a6fbda..ce23f89a6725331dd38cbb026884a0bbd33d85f2 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -87,6 +87,57 @@ using blink::WebBrowserControlsState;
namespace content {
namespace {
+using ReportTimeCallback = base::Callback<void(bool, double)>;
+
+double MonotonicallyIncreasingTime() {
+ return static_cast<double>(base::TimeTicks::Now().ToInternalValue()) /
+ base::Time::kMicrosecondsPerSecond;
+}
+
+class ReportTimeSwapPromise : public cc::SwapPromise {
+ public:
+ ReportTimeSwapPromise(
+ ReportTimeCallback callback,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
+ ~ReportTimeSwapPromise() override;
+
+ void DidActivate() override {}
+ void WillSwap(cc::CompositorFrameMetadata* metadata) override {}
+ void DidSwap() override;
+ DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
+
+ int64_t TraceId() const override;
+
+ private:
+ ReportTimeCallback callback_;
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+
+ DISALLOW_COPY_AND_ASSIGN(ReportTimeSwapPromise);
+};
+
+ReportTimeSwapPromise::ReportTimeSwapPromise(
+ ReportTimeCallback callback,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
+ : callback_(callback), task_runner_(task_runner) {}
+
+ReportTimeSwapPromise::~ReportTimeSwapPromise() {}
+
+void ReportTimeSwapPromise::DidSwap() {
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(callback_, true, MonotonicallyIncreasingTime()));
+}
+
+cc::SwapPromise::DidNotSwapAction ReportTimeSwapPromise::DidNotSwap(
+ cc::SwapPromise::DidNotSwapReason reason) {
+ task_runner_->PostTask(FROM_HERE, base::BindOnce(callback_, false, 0));
+ return cc::SwapPromise::DidNotSwapAction::BREAK_PROMISE;
+}
+
+int64_t ReportTimeSwapPromise::TraceId() const {
+ return 0;
+}
+
bool GetSwitchValueAsInt(const base::CommandLine& command_line,
const std::string& switch_string,
int min_value,
@@ -1155,4 +1206,9 @@ void RenderWidgetCompositor::SetLocalSurfaceId(
layer_tree_host_->SetLocalSurfaceId(local_surface_id);
}
+void RenderWidgetCompositor::NotifySwapTime(ReportTimeCallback callback) {
+ QueueSwapPromise(base::MakeUnique<ReportTimeSwapPromise>(
+ std::move(callback), base::ThreadTaskRunnerHandle::Get()));
+}
+
} // namespace content
« no previous file with comments | « content/renderer/gpu/render_widget_compositor.h ('k') | third_party/WebKit/Source/core/paint/PaintTiming.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698