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

Side by Side Diff: blimp/client/feature/compositor/blimp_delegating_output_surface.cc

Issue 2266863003: blimp: Move BlimpCompositor to use delegated rendering. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make gn happy Created 4 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "blimp/client/feature/compositor/blimp_delegating_output_surface.h"
6
7 #include <stdint.h>
8 #include <utility>
9
10 #include "cc/output/texture_mailbox_deleter.h"
11
12 static constexpr uint32_t kCompositorClientId = 1;
13
14 namespace blimp {
15 namespace client {
16
17 BlimpDelegatingOutputSurface::BlimpDelegatingOutputSurface(
18 scoped_refptr<cc::ContextProvider> compositor_context_provider,
19 scoped_refptr<cc::ContextProvider> worker_context_provider,
20 std::unique_ptr<cc::OutputSurface> display_output_surface,
21 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
22 const cc::RendererSettings& renderer_settings,
23 base::SingleThreadTaskRunner* task_runner)
24 : cc::OutputSurface(std::move(compositor_context_provider),
25 std::move(worker_context_provider),
26 nullptr),
27 surface_manager_(new cc::SurfaceManager),
28 surface_id_allocator_(new cc::SurfaceIdAllocator(kCompositorClientId)),
29 surface_factory_(new cc::SurfaceFactory(surface_manager_.get(), this)) {
30 std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source(
31 new cc::DelayBasedBeginFrameSource(
32 base::MakeUnique<cc::DelayBasedTimeSource>(task_runner)));
33 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler(
34 begin_frame_source.get(), task_runner,
35 display_output_surface->capabilities().max_frames_pending));
36 display_.reset(new cc::Display(
37 nullptr /*shared_bitmap_manager*/, gpu_memory_buffer_manager,
38 renderer_settings, std::move(begin_frame_source),
39 std::move(display_output_surface), std::move(scheduler),
40 base::MakeUnique<cc::TextureMailboxDeleter>(task_runner)));
41
42 capabilities_.delegated_rendering = true;
43 }
44
45 BlimpDelegatingOutputSurface::~BlimpDelegatingOutputSurface() = default;
46
47 bool BlimpDelegatingOutputSurface::BindToClient(
48 cc::OutputSurfaceClient* client) {
49 bool bound = cc::OutputSurface::BindToClient(client);
50 DCHECK(bound); // No support for failing to set up the context.
51
52 surface_manager_->RegisterSurfaceClientId(surface_id_allocator_->client_id());
53 surface_manager_->RegisterSurfaceFactoryClient(
54 surface_id_allocator_->client_id(), this);
55 display_->Initialize(this, surface_manager_.get(),
56 surface_id_allocator_->client_id());
57 display_->SetVisible(true);
58 return true;
59 }
60
61 void BlimpDelegatingOutputSurface::DetachFromClient() {
62 if (!delegated_surface_id_.is_null())
63 surface_factory_->Destroy(delegated_surface_id_);
64 surface_manager_->UnregisterSurfaceFactoryClient(
65 surface_id_allocator_->client_id());
66 surface_manager_->InvalidateSurfaceClientId(
67 surface_id_allocator_->client_id());
68 display_ = nullptr;
69 surface_factory_ = nullptr;
70 surface_id_allocator_ = nullptr;
71 surface_manager_ = nullptr;
72 cc::OutputSurface::DetachFromClient();
73 }
74
75 void BlimpDelegatingOutputSurface::SwapBuffers(cc::CompositorFrame frame) {
76 if (delegated_surface_id_.is_null()) {
77 delegated_surface_id_ = surface_id_allocator_->GenerateId();
78 surface_factory_->Create(delegated_surface_id_);
79 }
80 display_->SetSurfaceId(delegated_surface_id_,
81 frame.metadata.device_scale_factor);
82
83 gfx::Size frame_size =
84 frame.delegated_frame_data->render_pass_list.back()->output_rect.size();
85 display_->Resize(frame_size);
86
87 surface_factory_->SubmitCompositorFrame(delegated_surface_id_,
88 std::move(frame), base::Closure());
89 cc::OutputSurface::PostSwapBuffersComplete();
90 }
91
92 void BlimpDelegatingOutputSurface::ForceReclaimResources() {}
93
94 void BlimpDelegatingOutputSurface::BindFramebuffer() {
95 // This is a delegating output surface, no framebuffer/direct drawing support.
96 NOTREACHED();
97 }
98
99 uint32_t BlimpDelegatingOutputSurface::GetFramebufferCopyTextureFormat() {
100 // This is a delegating output surface, no framebuffer/direct drawing support.
101 NOTREACHED();
102 return 0;
103 }
104
105 void BlimpDelegatingOutputSurface::ReturnResources(
106 const cc::ReturnedResourceArray& resources) {
107 client_->ReclaimResources(resources);
108 }
109
110 void BlimpDelegatingOutputSurface::SetBeginFrameSource(
111 cc::BeginFrameSource* begin_frame_source) {
112 client_->SetBeginFrameSource(begin_frame_source);
113 }
114
115 void BlimpDelegatingOutputSurface::DisplayOutputSurfaceLost() {
116 DidLoseOutputSurface();
117 }
118
119 void BlimpDelegatingOutputSurface::DisplaySetMemoryPolicy(
120 const cc::ManagedMemoryPolicy& policy) {
121 SetMemoryPolicy(policy);
122 }
123
124 void BlimpDelegatingOutputSurface::DisplayWillDrawAndSwap(
125 bool will_draw_and_swap,
126 const cc::RenderPassList& render_passes) {}
127
128 void BlimpDelegatingOutputSurface::DisplayDidDrawAndSwap() {}
129
130 } // namespace client
131 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698