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

Unified Diff: cc/surfaces/display.cc

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Brian's comments. Created 4 years 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 | « cc/surfaces/display.h ('k') | cc/surfaces/display_begin_frame_source.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/display.cc
diff --git a/cc/surfaces/display.cc b/cc/surfaces/display.cc
index a0ffb2ce35fce3f46f4c5674d1de15016926f006..235e67487669d796fdc84bc5d72fb084af073bd7 100644
--- a/cc/surfaces/display.cc
+++ b/cc/surfaces/display.cc
@@ -12,6 +12,7 @@
#include "cc/output/compositor_frame.h"
#include "cc/output/direct_renderer.h"
#include "cc/output/gl_renderer.h"
+#include "cc/output/output_surface_frame.h"
#include "cc/output/renderer_settings.h"
#include "cc/output/software_renderer.h"
#include "cc/output/texture_mailbox_deleter.h"
@@ -42,15 +43,18 @@ Display::Display(SharedBitmapManager* bitmap_manager,
gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
settings_(settings),
frame_sink_id_(frame_sink_id),
- begin_frame_source_(std::move(begin_frame_source)),
+ begin_frame_source_(
+ new DisplayBeginFrameSource(std::move(begin_frame_source))),
output_surface_(std::move(output_surface)),
scheduler_(std::move(scheduler)),
texture_mailbox_deleter_(std::move(texture_mailbox_deleter)) {
DCHECK(output_surface_);
- DCHECK_EQ(!scheduler_, !begin_frame_source_);
+ DCHECK_EQ(!scheduler_, !begin_frame_source_->GetWrappedSource());
DCHECK(frame_sink_id_.is_valid());
- if (scheduler_)
+ if (scheduler_) {
scheduler_->SetClient(this);
+ scheduler_->SetBeginFrameSource(begin_frame_source_.get());
+ }
}
Display::~Display() {
@@ -58,8 +62,7 @@ Display::~Display() {
if (client_) {
if (auto* context = output_surface_->context_provider())
context->SetLostContextCallback(base::Closure());
- if (begin_frame_source_)
- surface_manager_->UnregisterBeginFrameSource(begin_frame_source_.get());
+ surface_manager_->UnregisterBeginFrameSource(begin_frame_source_.get());
surface_manager_->RemoveObserver(this);
}
if (aggregator_) {
@@ -82,10 +85,8 @@ void Display::Initialize(DisplayClient* client,
// This must be done in Initialize() so that the caller can delay this until
// they are ready to receive a BeginFrameSource.
- if (begin_frame_source_) {
- surface_manager_->RegisterBeginFrameSource(begin_frame_source_.get(),
- frame_sink_id_);
- }
+ surface_manager_->RegisterBeginFrameSource(begin_frame_source_.get(),
+ frame_sink_id_);
output_surface_->BindToClient(this);
InitializeRenderer();
@@ -328,7 +329,15 @@ bool Display::DrawAndSwap() {
"Display::DrawAndSwap");
}
benchmark_instrumentation::IssueDisplayRenderingStatsEvent();
- renderer_->SwapBuffers(std::move(frame.metadata.latency_info));
+ OutputSurfaceFrame output_frame;
+ output_frame.latency_info = std::move(frame.metadata.latency_info);
+ // Pass on frame number information through |output_frame| for output
+ // surfaces that acknowledge the frame to an external BeginFrameSource.
+ output_frame.begin_frame_source_id = begin_frame_source_->CurrentSourceId();
+ output_frame.begin_frame_number = begin_frame_source_->CurrentFrameNumber();
+ output_frame.begin_frame_number =
+ begin_frame_source_->LatestConfirmedFrame();
+ renderer_->SwapBuffers(std::move(output_frame));
if (scheduler_)
scheduler_->DidSwapBuffers();
} else {
@@ -403,4 +412,9 @@ void Display::ForceImmediateDrawAndSwapIfPossible() {
scheduler_->ForceImmediateSwapIfPossible();
}
+void Display::SwapBeginFrameSource(
+ std::unique_ptr<BeginFrameSource>* begin_frame_source) {
+ begin_frame_source_->SwapWrappedSource(begin_frame_source);
+}
+
} // namespace cc
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_begin_frame_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698