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

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

Issue 1380653003: Mac Overlays: Allow SolidColor and Tile quads to be candidates for overlays. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@AllOrNothing2
Patch Set: Created 5 years, 2 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
« no previous file with comments | « cc/output/overlay_candidate.h ('k') | cc/output/overlay_candidate_validator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/overlay_candidate.h" 5 #include "cc/output/overlay_candidate.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 165 }
166 } 166 }
167 167
168 } // namespace 168 } // namespace
169 169
170 OverlayCandidate::OverlayCandidate() 170 OverlayCandidate::OverlayCandidate()
171 : transform(gfx::OVERLAY_TRANSFORM_NONE), 171 : transform(gfx::OVERLAY_TRANSFORM_NONE),
172 format(RGBA_8888), 172 format(RGBA_8888),
173 uv_rect(0.f, 0.f, 1.f, 1.f), 173 uv_rect(0.f, 0.f, 1.f, 1.f),
174 is_clipped(false), 174 is_clipped(false),
175 use_output_surface_for_resource(false), 175 resource_type(HAS_RESOURCE),
176 resource_id(0),
177 plane_z_order(0), 176 plane_z_order(0),
178 overlay_handled(false) {} 177 overlay_handled(false) {}
179 178
180 OverlayCandidate::~OverlayCandidate() {} 179 OverlayCandidate::~OverlayCandidate() {}
181 180
182 // static 181 // static
183 bool OverlayCandidate::FromDrawQuad(ResourceProvider* resource_provider, 182 bool OverlayCandidate::FromDrawQuad(ResourceProvider* resource_provider,
184 const DrawQuad* quad, 183 const DrawQuad* quad,
185 OverlayCandidate* candidate) { 184 OverlayCandidate* candidate) {
186 if (quad->needs_blending || quad->shared_quad_state->opacity != 1.f || 185 if (quad->needs_blending || quad->shared_quad_state->opacity != 1.f ||
(...skipping 14 matching lines...) Expand all
201 case DrawQuad::TEXTURE_CONTENT: 200 case DrawQuad::TEXTURE_CONTENT:
202 return FromTextureQuad(resource_provider, 201 return FromTextureQuad(resource_provider,
203 TextureDrawQuad::MaterialCast(quad), candidate); 202 TextureDrawQuad::MaterialCast(quad), candidate);
204 case DrawQuad::STREAM_VIDEO_CONTENT: 203 case DrawQuad::STREAM_VIDEO_CONTENT:
205 return FromStreamVideoQuad(resource_provider, 204 return FromStreamVideoQuad(resource_provider,
206 StreamVideoDrawQuad::MaterialCast(quad), 205 StreamVideoDrawQuad::MaterialCast(quad),
207 candidate); 206 candidate);
208 case DrawQuad::IO_SURFACE_CONTENT: 207 case DrawQuad::IO_SURFACE_CONTENT:
209 return FromIOSurfaceQuad( 208 return FromIOSurfaceQuad(
210 resource_provider, IOSurfaceDrawQuad::MaterialCast(quad), candidate); 209 resource_provider, IOSurfaceDrawQuad::MaterialCast(quad), candidate);
210 case DrawQuad::TILED_CONTENT:
211 return FromTileQuad(resource_provider, TileDrawQuad::MaterialCast(quad),
212 candidate);
213 case DrawQuad::SOLID_COLOR:
214 return FromSolidColorQuad(SolidColorDrawQuad::MaterialCast(quad),
215 candidate);
211 default: 216 default:
212 break; 217 break;
213 } 218 }
214 219
215 return false; 220 return false;
216 } 221 }
217 222
218 // static 223 // static
219 bool OverlayCandidate::IsInvisibleQuad(const DrawQuad* quad) { 224 bool OverlayCandidate::IsInvisibleQuad(const DrawQuad* quad) {
220 if (quad->material == DrawQuad::SOLID_COLOR) { 225 if (quad->material == DrawQuad::SOLID_COLOR) {
221 SkColor color = SolidColorDrawQuad::MaterialCast(quad)->color; 226 SkColor color = SolidColorDrawQuad::MaterialCast(quad)->color;
222 float opacity = quad->shared_quad_state->opacity; 227 float opacity = quad->shared_quad_state->opacity;
223 float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity; 228 float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity;
224 return quad->ShouldDrawWithBlending() && 229 return quad->ShouldDrawWithBlending() &&
225 alpha < std::numeric_limits<float>::epsilon(); 230 alpha < std::numeric_limits<float>::epsilon();
226 } 231 }
227 return false; 232 return false;
228 } 233 }
229 234
230 // static 235 // static
231 bool OverlayCandidate::FromTextureQuad(ResourceProvider* resource_provider, 236 bool OverlayCandidate::FromTextureQuad(ResourceProvider* resource_provider,
232 const TextureDrawQuad* quad, 237 const TextureDrawQuad* quad,
233 OverlayCandidate* candidate) { 238 OverlayCandidate* candidate) {
234 if (!resource_provider->IsOverlayCandidate(quad->resource_id())) 239 if (!resource_provider->IsOverlayCandidate(quad->resource_id()))
235 return false; 240 return false;
236 gfx::OverlayTransform overlay_transform = GetOverlayTransform( 241 gfx::OverlayTransform overlay_transform = GetOverlayTransform(
237 quad->shared_quad_state->quad_to_target_transform, quad->y_flipped); 242 quad->shared_quad_state->quad_to_target_transform, quad->y_flipped);
238 if (quad->background_color != SK_ColorTRANSPARENT || 243 if (quad->background_color != SK_ColorTRANSPARENT ||
239 quad->premultiplied_alpha ||
240 overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) 244 overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID)
241 return false; 245 return false;
242 candidate->resource_id = quad->resource_id(); 246 candidate->resource.resource_id = quad->resource_id();
243 candidate->resource_size_in_pixels = quad->resource_size_in_pixels(); 247 candidate->resource_size_in_pixels = quad->resource_size_in_pixels();
244 candidate->transform = overlay_transform; 248 candidate->transform = overlay_transform;
245 candidate->uv_rect = BoundingRect(quad->uv_top_left, quad->uv_bottom_right); 249 candidate->uv_rect = BoundingRect(quad->uv_top_left, quad->uv_bottom_right);
246 return true; 250 return true;
247 } 251 }
248 252
249 // static 253 // static
250 bool OverlayCandidate::FromStreamVideoQuad(ResourceProvider* resource_provider, 254 bool OverlayCandidate::FromStreamVideoQuad(ResourceProvider* resource_provider,
251 const StreamVideoDrawQuad* quad, 255 const StreamVideoDrawQuad* quad,
252 OverlayCandidate* candidate) { 256 OverlayCandidate* candidate) {
253 if (!resource_provider->IsOverlayCandidate(quad->resource_id())) 257 if (!resource_provider->IsOverlayCandidate(quad->resource_id()))
254 return false; 258 return false;
255 gfx::OverlayTransform overlay_transform = GetOverlayTransform( 259 gfx::OverlayTransform overlay_transform = GetOverlayTransform(
256 quad->shared_quad_state->quad_to_target_transform, false); 260 quad->shared_quad_state->quad_to_target_transform, false);
257 if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) 261 if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID)
258 return false; 262 return false;
259 if (!quad->matrix.IsScaleOrTranslation()) { 263 if (!quad->matrix.IsScaleOrTranslation()) {
260 // We cannot handle anything other than scaling & translation for texture 264 // We cannot handle anything other than scaling & translation for texture
261 // coordinates yet. 265 // coordinates yet.
262 return false; 266 return false;
263 } 267 }
264 candidate->resource_id = quad->resource_id(); 268 candidate->resource.resource_id = quad->resource_id();
265 candidate->resource_size_in_pixels = quad->resource_size_in_pixels(); 269 candidate->resource_size_in_pixels = quad->resource_size_in_pixels();
266 candidate->transform = overlay_transform; 270 candidate->transform = overlay_transform;
267 271
268 gfx::Point3F uv0 = gfx::Point3F(0, 0, 0); 272 gfx::Point3F uv0 = gfx::Point3F(0, 0, 0);
269 gfx::Point3F uv1 = gfx::Point3F(1, 1, 0); 273 gfx::Point3F uv1 = gfx::Point3F(1, 1, 0);
270 quad->matrix.TransformPoint(&uv0); 274 quad->matrix.TransformPoint(&uv0);
271 quad->matrix.TransformPoint(&uv1); 275 quad->matrix.TransformPoint(&uv1);
272 gfx::Vector3dF delta = uv1 - uv0; 276 gfx::Vector3dF delta = uv1 - uv0;
273 if (delta.x() < 0) { 277 if (delta.x() < 0) {
274 candidate->transform = ComposeTransforms( 278 candidate->transform = ComposeTransforms(
(...skipping 20 matching lines...) Expand all
295 // static 299 // static
296 bool OverlayCandidate::FromIOSurfaceQuad(ResourceProvider* resource_provider, 300 bool OverlayCandidate::FromIOSurfaceQuad(ResourceProvider* resource_provider,
297 const IOSurfaceDrawQuad* quad, 301 const IOSurfaceDrawQuad* quad,
298 OverlayCandidate* candidate) { 302 OverlayCandidate* candidate) {
299 if (!resource_provider->IsOverlayCandidate(quad->io_surface_resource_id())) 303 if (!resource_provider->IsOverlayCandidate(quad->io_surface_resource_id()))
300 return false; 304 return false;
301 gfx::OverlayTransform overlay_transform = GetOverlayTransform( 305 gfx::OverlayTransform overlay_transform = GetOverlayTransform(
302 quad->shared_quad_state->quad_to_target_transform, false); 306 quad->shared_quad_state->quad_to_target_transform, false);
303 if (overlay_transform != gfx::OVERLAY_TRANSFORM_NONE) 307 if (overlay_transform != gfx::OVERLAY_TRANSFORM_NONE)
304 return false; 308 return false;
305 candidate->resource_id = quad->io_surface_resource_id(); 309 candidate->resource.resource_id = quad->io_surface_resource_id();
306 candidate->resource_size_in_pixels = quad->io_surface_size; 310 candidate->resource_size_in_pixels = quad->io_surface_size;
307 candidate->transform = overlay_transform; 311 candidate->transform = overlay_transform;
308 candidate->uv_rect = gfx::RectF(1.f, 1.f); 312 candidate->uv_rect = gfx::RectF(1.f, 1.f);
309 return true; 313 return true;
310 } 314 }
311 315
316 // static
317 bool OverlayCandidate::FromTileQuad(ResourceProvider* resource_provider,
318 const TileDrawQuad* quad,
319 OverlayCandidate* candidate) {
320 if (!resource_provider->IsOverlayCandidate(quad->resource_id()))
321 return false;
322 candidate->transform = GetOverlayTransform(
323 quad->shared_quad_state->quad_to_target_transform, false);
324 if (candidate->transform != gfx::OVERLAY_TRANSFORM_NONE)
325 return false;
326 candidate->resource.resource_id = quad->resource_id();
327 candidate->resource_size_in_pixels = quad->texture_size;
328 candidate->uv_rect = quad->tex_coord_rect;
329 candidate->uv_rect.Scale(1.f / quad->texture_size.width(),
330 1.f / quad->texture_size.height());
331 return true;
332 }
333
334 // static
335 bool OverlayCandidate::FromSolidColorQuad(const SolidColorDrawQuad* quad,
336 OverlayCandidate* candidate) {
337 candidate->transform = GetOverlayTransform(
338 quad->shared_quad_state->quad_to_target_transform, false);
339 if (candidate->transform != gfx::OVERLAY_TRANSFORM_NONE)
340 return false;
341 candidate->resource_type = SOLID_COLOR;
342 candidate->resource.solid_color = quad->color;
343 return true;
344 }
345
312 } // namespace cc 346 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_candidate.h ('k') | cc/output/overlay_candidate_validator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698