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

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

Issue 2241623002: blimp: Move compositing, input and render widget feature to client/core. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments from #7 Created 4 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 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 // TODO(danakj): Do this when https://codereview.chromium.org/2238693002/ .
58 // display_->SetVisible(true);
59 return true;
60 }
61
62 void BlimpDelegatingOutputSurface::DetachFromClient() {
63 if (!delegated_surface_id_.is_null())
64 surface_factory_->Destroy(delegated_surface_id_);
65 surface_manager_->UnregisterSurfaceFactoryClient(
66 surface_id_allocator_->client_id());
67 surface_manager_->InvalidateSurfaceClientId(
68 surface_id_allocator_->client_id());
69 display_ = nullptr;
70 surface_factory_ = nullptr;
71 surface_id_allocator_ = nullptr;
72 surface_manager_ = nullptr;
73 cc::OutputSurface::DetachFromClient();
74 }
75
76 void BlimpDelegatingOutputSurface::SwapBuffers(cc::CompositorFrame frame) {
77 if (delegated_surface_id_.is_null()) {
78 delegated_surface_id_ = surface_id_allocator_->GenerateId();
79 surface_factory_->Create(delegated_surface_id_);
80 }
81 display_->SetSurfaceId(delegated_surface_id_,
82 frame.metadata.device_scale_factor);
83
84 gfx::Size frame_size =
85 frame.delegated_frame_data->render_pass_list.back()->output_rect.size();
86 display_->Resize(frame_size);
87
88 surface_factory_->SubmitCompositorFrame(delegated_surface_id_,
89 std::move(frame), base::Closure());
90 cc::OutputSurface::PostSwapBuffersComplete();
91 }
92
93 void BlimpDelegatingOutputSurface::ForceReclaimResources() {}
94
95 void BlimpDelegatingOutputSurface::BindFramebuffer() {
96 // This is a delegating output surface, no framebuffer/direct drawing support.
97 NOTREACHED();
98 }
99
100 uint32_t BlimpDelegatingOutputSurface::GetFramebufferCopyTextureFormat() {
101 // This is a delegating output surface, no framebuffer/direct drawing support.
102 NOTREACHED();
103 return 0;
104 }
105
106 void BlimpDelegatingOutputSurface::ReturnResources(
107 const cc::ReturnedResourceArray& resources) {
108 client_->ReclaimResources(resources);
109 }
110
111 void BlimpDelegatingOutputSurface::SetBeginFrameSource(
112 cc::BeginFrameSource* begin_frame_source) {
113 client_->SetBeginFrameSource(begin_frame_source);
114 }
115
116 void BlimpDelegatingOutputSurface::DisplayOutputSurfaceLost() {
117 DidLoseOutputSurface();
118 }
119
120 void BlimpDelegatingOutputSurface::DisplaySetMemoryPolicy(
121 const cc::ManagedMemoryPolicy& policy) {
122 SetMemoryPolicy(policy);
123 }
124
125 void BlimpDelegatingOutputSurface::DisplayWillDrawAndSwap(
126 bool will_draw_and_swap,
127 const cc::RenderPassList& render_passes) {}
128
129 void BlimpDelegatingOutputSurface::DisplayDidDrawAndSwap() {}
130
131 } // namespace client
132 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698