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

Side by Side Diff: cc/output/delegating_renderer.cc

Issue 14960006: cc: Don't do CompositeAndReadback when using DelegatingRenderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/output/delegating_renderer.h" 5 #include "cc/output/delegating_renderer.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/debug/trace_event.h" 11 #include "base/debug/trace_event.h"
12 #include "base/string_util.h" 12 #include "base/string_util.h"
13 #include "base/strings/string_split.h" 13 #include "base/strings/string_split.h"
14 #include "cc/output/compositor_frame.h"
15 #include "cc/output/compositor_frame_ack.h" 14 #include "cc/output/compositor_frame_ack.h"
16 #include "cc/quads/checkerboard_draw_quad.h" 15 #include "cc/quads/checkerboard_draw_quad.h"
17 #include "cc/quads/debug_border_draw_quad.h" 16 #include "cc/quads/debug_border_draw_quad.h"
18 #include "cc/quads/render_pass.h" 17 #include "cc/quads/render_pass.h"
19 #include "cc/quads/render_pass_draw_quad.h" 18 #include "cc/quads/render_pass_draw_quad.h"
20 #include "cc/quads/solid_color_draw_quad.h" 19 #include "cc/quads/solid_color_draw_quad.h"
21 #include "cc/quads/texture_draw_quad.h" 20 #include "cc/quads/texture_draw_quad.h"
22 #include "cc/quads/tile_draw_quad.h" 21 #include "cc/quads/tile_draw_quad.h"
23 #include "cc/quads/yuv_video_draw_quad.h" 22 #include "cc/quads/yuv_video_draw_quad.h"
24 #include "cc/resources/resource_provider.h" 23 #include "cc/resources/resource_provider.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 115
117 return true; 116 return true;
118 } 117 }
119 118
120 DelegatingRenderer::~DelegatingRenderer() {} 119 DelegatingRenderer::~DelegatingRenderer() {}
121 120
122 const RendererCapabilities& DelegatingRenderer::Capabilities() const { 121 const RendererCapabilities& DelegatingRenderer::Capabilities() const {
123 return capabilities_; 122 return capabilities_;
124 } 123 }
125 124
125 bool DelegatingRenderer::CanReadPixels() const { return false; }
126
126 static ResourceProvider::ResourceId AppendToArray( 127 static ResourceProvider::ResourceId AppendToArray(
127 ResourceProvider::ResourceIdArray* array, 128 ResourceProvider::ResourceIdArray* array,
128 ResourceProvider::ResourceId id) { 129 ResourceProvider::ResourceId id) {
129 array->push_back(id); 130 array->push_back(id);
130 return id; 131 return id;
131 } 132 }
132 133
133 void DelegatingRenderer::DrawFrame( 134 void DelegatingRenderer::DrawFrame(
134 RenderPassList* render_passes_in_draw_order) { 135 RenderPassList* render_passes_in_draw_order) {
135 TRACE_EVENT0("cc", "DelegatingRenderer::DrawFrame"); 136 TRACE_EVENT0("cc", "DelegatingRenderer::DrawFrame");
136 render_passes_for_swap_buffers_.swap(*render_passes_in_draw_order);
137 render_passes_in_draw_order->clear();
138 }
139 137
140 void DelegatingRenderer::SwapBuffers(const LatencyInfo& latency_info) { 138 DCHECK(!frame_for_swap_buffers_.delegated_frame_data);
141 TRACE_EVENT0("cc", "DelegatingRenderer::SwapBuffers");
142 139
143 CompositorFrame out_frame; 140 frame_for_swap_buffers_.metadata = client_->MakeCompositorFrameMetadata();
144 out_frame.metadata = client_->MakeCompositorFrameMetadata();
145 141
146 out_frame.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData); 142 frame_for_swap_buffers_.delegated_frame_data =
147 DelegatedFrameData& out_data = *out_frame.delegated_frame_data; 143 make_scoped_ptr(new DelegatedFrameData);
144 DelegatedFrameData& out_data = *frame_for_swap_buffers_.delegated_frame_data;
148 // Move the render passes and resources into the |out_frame|. 145 // Move the render passes and resources into the |out_frame|.
149 out_data.render_pass_list.swap(render_passes_for_swap_buffers_); 146 out_data.render_pass_list.swap(*render_passes_in_draw_order);
150 147
151 // Collect all resource ids in the render passes into a ResourceIdArray. 148 // Collect all resource ids in the render passes into a ResourceIdArray.
152 ResourceProvider::ResourceIdArray resources; 149 ResourceProvider::ResourceIdArray resources;
153 DrawQuad::ResourceIteratorCallback append_to_array = 150 DrawQuad::ResourceIteratorCallback append_to_array =
154 base::Bind(&AppendToArray, &resources); 151 base::Bind(&AppendToArray, &resources);
155 for (size_t i = 0; i < out_data.render_pass_list.size(); ++i) { 152 for (size_t i = 0; i < out_data.render_pass_list.size(); ++i) {
156 RenderPass* render_pass = out_data.render_pass_list.at(i); 153 RenderPass* render_pass = out_data.render_pass_list.at(i);
157 for (size_t j = 0; j < render_pass->quad_list.size(); ++j) 154 for (size_t j = 0; j < render_pass->quad_list.size(); ++j)
158 render_pass->quad_list[j]->IterateResources(append_to_array); 155 render_pass->quad_list[j]->IterateResources(append_to_array);
159 } 156 }
160 resource_provider_->PrepareSendToParent(resources, &out_data.resource_list); 157 resource_provider_->PrepareSendToParent(resources, &out_data.resource_list);
158 }
161 159
162 output_surface_->SendFrameToParentCompositor(&out_frame); 160 void DelegatingRenderer::SwapBuffers(const LatencyInfo& latency_info) {
161 TRACE_EVENT0("cc", "DelegatingRenderer::SwapBuffers");
162
163 output_surface_->SendFrameToParentCompositor(&frame_for_swap_buffers_);
164 DCHECK(!frame_for_swap_buffers_.delegated_frame_data);
163 } 165 }
164 166
165 void DelegatingRenderer::GetFramebufferPixels(void* pixels, gfx::Rect rect) { 167 void DelegatingRenderer::GetFramebufferPixels(void* pixels, gfx::Rect rect) {
166 NOTIMPLEMENTED(); 168 NOTREACHED();
167 } 169 }
168 170
169 void DelegatingRenderer::ReceiveCompositorFrameAck( 171 void DelegatingRenderer::ReceiveCompositorFrameAck(
170 const CompositorFrameAck& ack) { 172 const CompositorFrameAck& ack) {
171 resource_provider_->ReceiveFromParent(ack.resources); 173 resource_provider_->ReceiveFromParent(ack.resources);
172 } 174 }
173 175
174 176
175 bool DelegatingRenderer::IsContextLost() { 177 bool DelegatingRenderer::IsContextLost() {
176 WebGraphicsContext3D* context3d = resource_provider_->GraphicsContext3D(); 178 WebGraphicsContext3D* context3d = resource_provider_->GraphicsContext3D();
177 if (!context3d) 179 if (!context3d)
178 return false; 180 return false;
179 return context3d->getGraphicsResetStatusARB() != GL_NO_ERROR; 181 return context3d->getGraphicsResetStatusARB() != GL_NO_ERROR;
180 } 182 }
181 183
182 void DelegatingRenderer::SetVisible(bool visible) { 184 void DelegatingRenderer::SetVisible(bool visible) {
183 visible_ = visible; 185 visible_ = visible;
184 } 186 }
185 187
186 } // namespace cc 188 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698