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

Unified Diff: services/view_manager/display_manager.cc

Issue 940293003: Add a Display and ContextProvider concept to mojom, use to recreate (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 | « services/view_manager/display_manager.h ('k') | shell/android/native_viewport_application_loader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/view_manager/display_manager.cc
diff --git a/services/view_manager/display_manager.cc b/services/view_manager/display_manager.cc
index 0e4f3b8f48f9bdd4f387722a56b5175a717e4838..e9d0816264b26e583490615f91c1823d19e27b21 100644
--- a/services/view_manager/display_manager.cc
+++ b/services/view_manager/display_manager.cc
@@ -5,7 +5,6 @@
#include "services/view_manager/display_manager.h"
#include "base/numerics/safe_conversions.h"
-#include "cc/surfaces/surface_id_allocator.h"
#include "mojo/converters/geometry/geometry_type_converters.h"
#include "mojo/converters/surfaces/surfaces_type_converters.h"
#include "mojo/public/cpp/application/application_connection.h"
@@ -13,6 +12,7 @@
#include "mojo/services/gpu/public/interfaces/gpu.mojom.h"
#include "mojo/services/surfaces/public/cpp/surfaces_utils.h"
#include "mojo/services/surfaces/public/interfaces/quads.mojom.h"
+#include "mojo/services/surfaces/public/interfaces/surfaces.mojom.h"
#include "services/view_manager/connection_manager.h"
#include "services/view_manager/server_view.h"
#include "services/view_manager/view_coordinate_conversions.h"
@@ -23,8 +23,6 @@ using mojo::Size;
namespace view_manager {
namespace {
-static uint32_t kLocalSurfaceID = 1u;
-
void DrawViewTree(mojo::Pass* pass,
const ServerView* view,
const gfx::Vector2d& parent_to_root_origin_offset,
@@ -81,8 +79,6 @@ DefaultDisplayManager::DefaultDisplayManager(
app_connection_(app_connection),
connection_manager_(nullptr),
draw_timer_(false, false),
- id_namespace_(0u),
- surface_allocated_(false),
native_viewport_closed_callback_(native_viewport_closed_callback),
weak_factory_(this) {
metrics_.size = mojo::Size::New();
@@ -95,15 +91,18 @@ void DefaultDisplayManager::Init(ConnectionManager* connection_manager) {
app_impl_->ConnectToService("mojo:native_viewport_service",
&native_viewport_);
native_viewport_.set_error_handler(this);
- native_viewport_->Create(
- metrics_.size->Clone(),
- base::Bind(&DefaultDisplayManager::OnCreatedNativeViewport,
- weak_factory_.GetWeakPtr()));
+ native_viewport_->Create(metrics_.size->Clone(),
+ base::Bind(&DefaultDisplayManager::OnMetricsChanged,
+ weak_factory_.GetWeakPtr()));
native_viewport_->Show();
- app_impl_->ConnectToService("mojo:surfaces_service", &surface_);
- surface_->GetIdNamespace(base::Bind(&DefaultDisplayManager::SetIdNamespace,
- base::Unretained(this)));
+ mojo::ContextProviderPtr context_provider;
+ native_viewport_->GetContextProvider(GetProxy(&context_provider));
+ mojo::DisplayFactoryPtr display_factory;
+ app_impl_->ConnectToService("mojo:surfaces_service", &display_factory);
+ display_factory->Create(context_provider.Pass(),
+ nullptr, // returner - we never submit resources.
+ GetProxy(&display_));
mojo::NativeViewportEventDispatcherPtr event_dispatcher;
app_connection_->ConnectToService(&event_dispatcher);
@@ -122,11 +121,7 @@ void DefaultDisplayManager::SchedulePaint(const ServerView* view,
if (root_relative_rect.IsEmpty())
return;
dirty_rect_.Union(root_relative_rect);
- if (!draw_timer_.IsRunning()) {
- draw_timer_.Start(
- FROM_HERE, base::TimeDelta(),
- base::Bind(&DefaultDisplayManager::Draw, base::Unretained(this)));
- }
+ WantToDraw();
}
void DefaultDisplayManager::SetViewportSize(const gfx::Size& size) {
@@ -137,18 +132,7 @@ const mojo::ViewportMetrics& DefaultDisplayManager::GetViewportMetrics() {
return metrics_;
}
-void DefaultDisplayManager::OnCreatedNativeViewport(
- uint64_t native_viewport_id,
- mojo::ViewportMetricsPtr metrics) {
- OnMetricsChanged(metrics.Pass());
-}
-
void DefaultDisplayManager::Draw() {
- if (!surface_allocated_) {
- surface_->CreateSurface(kLocalSurfaceID);
- surface_allocated_ = true;
- }
-
Rect rect;
rect.width = metrics_.size->width;
rect.height = metrics_.size->height;
@@ -160,16 +144,26 @@ void DefaultDisplayManager::Draw() {
auto frame = mojo::Frame::New();
frame->passes.push_back(pass.Pass());
frame->resources.resize(0u);
- surface_->SubmitFrame(kLocalSurfaceID, frame.Pass(), mojo::Closure());
+ frame_pending_ = true;
+ display_->SubmitFrame(
+ frame.Pass(),
+ base::Bind(&DefaultDisplayManager::DidDraw, base::Unretained(this)));
dirty_rect_ = gfx::Rect();
+}
- if (id_namespace_ == 0u)
+void DefaultDisplayManager::DidDraw() {
+ frame_pending_ = false;
+ if (!dirty_rect_.IsEmpty())
+ WantToDraw();
+}
+
+void DefaultDisplayManager::WantToDraw() {
+ if (draw_timer_.IsRunning() || frame_pending_)
return;
- auto qualified_id = mojo::SurfaceId::New();
- qualified_id->id_namespace = id_namespace_;
- qualified_id->local = kLocalSurfaceID;
- native_viewport_->SubmittedFrame(qualified_id.Pass());
+ draw_timer_.Start(
+ FROM_HERE, base::TimeDelta(),
+ base::Bind(&DefaultDisplayManager::Draw, base::Unretained(this)));
}
void DefaultDisplayManager::OnMetricsChanged(mojo::ViewportMetricsPtr metrics) {
@@ -178,25 +172,10 @@ void DefaultDisplayManager::OnMetricsChanged(mojo::ViewportMetricsPtr metrics) {
gfx::Rect bounds(metrics_.size.To<gfx::Size>());
connection_manager_->root()->SetBounds(bounds);
connection_manager_->ProcessViewportMetricsChanged(metrics_, *metrics);
- if (!surface_allocated_)
- return;
- surface_->DestroySurface(kLocalSurfaceID);
- surface_allocated_ = false;
- SchedulePaint(connection_manager_->root(), bounds);
native_viewport_->RequestMetrics(base::Bind(
&DefaultDisplayManager::OnMetricsChanged, weak_factory_.GetWeakPtr()));
}
-void DefaultDisplayManager::SetIdNamespace(uint32_t id_namespace) {
- id_namespace_ = id_namespace;
- if (surface_allocated_) {
- auto qualified_id = mojo::SurfaceId::New();
- qualified_id->id_namespace = id_namespace_;
- qualified_id->local = kLocalSurfaceID;
- native_viewport_->SubmittedFrame(qualified_id.Pass());
- }
-}
-
void DefaultDisplayManager::OnConnectionError() {
// This is called when the native_viewport is torn down before
// ~DefaultDisplayManager may be called.
« no previous file with comments | « services/view_manager/display_manager.h ('k') | shell/android/native_viewport_application_loader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698