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

Unified Diff: components/view_manager/display_manager.cc

Issue 1281663002: Mandoline: Allow submitting CompositorFrames directly to mojo::Views (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 5 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
Index: components/view_manager/display_manager.cc
diff --git a/components/view_manager/display_manager.cc b/components/view_manager/display_manager.cc
index c0954615ffcf3ee0c53be6b43ad89d652fde96ae..0acc6213ab948911612dcde856668813d13824b0 100644
--- a/components/view_manager/display_manager.cc
+++ b/components/view_manager/display_manager.cc
@@ -5,6 +5,11 @@
#include "components/view_manager/display_manager.h"
#include "base/numerics/safe_conversions.h"
+#include "cc/output/compositor_frame.h"
+#include "cc/output/delegated_frame_data.h"
+#include "cc/quads/render_pass.h"
+#include "cc/quads/shared_quad_state.h"
+#include "cc/quads/surface_draw_quad.h"
#include "components/view_manager/display_manager_factory.h"
#include "components/view_manager/gles2/gpu_state.h"
#include "components/view_manager/public/interfaces/gpu.mojom.h"
@@ -21,6 +26,7 @@
#include "mojo/converters/surfaces/surfaces_type_converters.h"
#include "mojo/converters/surfaces/surfaces_utils.h"
#include "mojo/converters/transform/transform_type_converters.h"
+#include "third_party/skia/include/core/SkXfermode.h"
#include "ui/events/event.h"
#include "ui/events/event_utils.h"
#include "ui/platform_window/platform_ime_controller.h"
@@ -41,7 +47,7 @@ using mojo::Size;
namespace view_manager {
namespace {
-void DrawViewTree(mojo::Pass* pass,
+void DrawViewTree(cc::RenderPass* pass,
const ServerView* view,
const gfx::Vector2d& parent_to_root_origin_offset,
float opacity) {
@@ -59,32 +65,25 @@ void DrawViewTree(mojo::Pass* pass,
combined_opacity);
}
- cc::SurfaceId node_id = view->surface_id();
-
- auto surface_quad_state = mojo::SurfaceQuadState::New();
- surface_quad_state->surface = mojo::SurfaceId::From(node_id);
-
gfx::Transform node_transform;
node_transform.Translate(absolute_bounds.x(), absolute_bounds.y());
+ cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
+ sqs->SetAll(node_transform /* quad_to_target_transform */,
+ view->bounds().size() /* layer_bounds */,
+ gfx::Rect(view->bounds().size()) /* visible_layer_rect */,
+ gfx::Rect(view->bounds().size()) /* clip_rect */,
+ false /* is_clipped */,
+ view->opacity() /* opacity */,
+ SkXfermode::kSrc_Mode,
+ 0 /* sorting-context_id */);
const gfx::Rect bounds_at_origin(view->bounds().size());
- auto surface_quad = mojo::Quad::New();
- surface_quad->material = mojo::Material::MATERIAL_SURFACE_CONTENT;
- surface_quad->rect = Rect::From(bounds_at_origin);
- surface_quad->opaque_rect = Rect::From(bounds_at_origin);
- surface_quad->visible_rect = Rect::From(bounds_at_origin);
- surface_quad->needs_blending = true;
- surface_quad->shared_quad_state_index =
- base::saturated_cast<int32_t>(pass->shared_quad_states.size());
- surface_quad->surface_quad_state = surface_quad_state.Pass();
-
- auto sqs = mojo::CreateDefaultSQS(view->bounds().size());
- sqs->blend_mode = mojo::SK_XFERMODE_kSrcOver_Mode;
- sqs->opacity = combined_opacity;
- sqs->quad_to_target_transform = mojo::Transform::From(node_transform);
-
- pass->quads.push_back(surface_quad.Pass());
- pass->shared_quad_states.push_back(sqs.Pass());
+ auto surface_quad =
+ pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
+ surface_quad->SetNew(sqs,
+ bounds_at_origin /* rect */,
+ bounds_at_origin /* visible_rect */,
+ view->surface_id());
}
float ConvertUIWheelValueToMojoValue(int offset) {
@@ -201,15 +200,21 @@ void DefaultDisplayManager::SetImeVisibility(bool visible) {
void DefaultDisplayManager::Draw() {
if (!delegate_->GetRootView()->visible())
return;
- gfx::Rect rect(metrics_.size_in_pixels.To<gfx::Size>());
- auto pass = mojo::CreateDefaultPass(1, rect);
- pass->damage_rect = Rect::From(dirty_rect_);
- DrawViewTree(pass.get(), delegate_->GetRootView(), gfx::Vector2d(), 1.0f);
+ scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
+ render_pass->damage_rect = dirty_rect_;
+ render_pass->output_rect = gfx::Rect(metrics_.size_in_pixels.To<gfx::Size>());
+
+ DrawViewTree(render_pass.get(),
+ delegate_->GetRootView(),
+ gfx::Vector2d(), 1.0f);
+
+ scoped_ptr<cc::DelegatedFrameData> frame_data(new cc::DelegatedFrameData);
+ frame_data->device_scale_factor = 1.f;
+ frame_data->render_pass_list.push_back(render_pass.Pass());
- auto frame = mojo::Frame::New();
- frame->passes.push_back(pass.Pass());
- frame->resources.resize(0u);
+ scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
+ frame->delegated_frame_data = frame_data.Pass();
frame_pending_ = true;
if (top_level_display_client_) {
top_level_display_client_->SubmitFrame(

Powered by Google App Engine
This is Rietveld 408576698