|  | // Copyright 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "cc/quads/draw_quad.h" | 
|  |  | 
|  | #include "base/debug/trace_event_argument.h" | 
|  | #include "base/logging.h" | 
|  | #include "base/values.h" | 
|  | #include "cc/base/math_util.h" | 
|  | #include "cc/debug/traced_value.h" | 
|  | #include "cc/quads/checkerboard_draw_quad.h" | 
|  | #include "cc/quads/debug_border_draw_quad.h" | 
|  | #include "cc/quads/io_surface_draw_quad.h" | 
|  | #include "cc/quads/picture_draw_quad.h" | 
|  | #include "cc/quads/render_pass_draw_quad.h" | 
|  | #include "cc/quads/solid_color_draw_quad.h" | 
|  | #include "cc/quads/stream_video_draw_quad.h" | 
|  | #include "cc/quads/surface_draw_quad.h" | 
|  | #include "cc/quads/texture_draw_quad.h" | 
|  | #include "cc/quads/tile_draw_quad.h" | 
|  | #include "cc/quads/yuv_video_draw_quad.h" | 
|  | #include "ui/gfx/geometry/quad_f.h" | 
|  |  | 
|  | namespace cc { | 
|  |  | 
|  | DrawQuad::DrawQuad() | 
|  | : material(INVALID), | 
|  | needs_blending(false), | 
|  | shared_quad_state() { | 
|  | } | 
|  |  | 
|  | void DrawQuad::SetAll(const SharedQuadState* shared_quad_state, | 
|  | Material material, | 
|  | const gfx::Rect& rect, | 
|  | const gfx::Rect& opaque_rect, | 
|  | const gfx::Rect& visible_rect, | 
|  | bool needs_blending) { | 
|  | DCHECK(rect.Contains(visible_rect)) << "rect: " << rect.ToString() | 
|  | << " visible_rect: " | 
|  | << visible_rect.ToString(); | 
|  | DCHECK(opaque_rect.IsEmpty() || rect.Contains(opaque_rect)) | 
|  | << "rect: " << rect.ToString() << "opaque_rect " | 
|  | << opaque_rect.ToString(); | 
|  |  | 
|  | this->material = material; | 
|  | this->rect = rect; | 
|  | this->opaque_rect = opaque_rect; | 
|  | this->visible_rect = visible_rect; | 
|  | this->needs_blending = needs_blending; | 
|  | this->shared_quad_state = shared_quad_state; | 
|  |  | 
|  | DCHECK(shared_quad_state); | 
|  | DCHECK(material != INVALID); | 
|  | } | 
|  |  | 
|  | DrawQuad::~DrawQuad() { | 
|  | } | 
|  |  | 
|  | void DrawQuad::AsValueInto(base::debug::TracedValue* value) const { | 
|  | value->SetInteger("material", material); | 
|  | TracedValue::SetIDRef(shared_quad_state, value, "shared_state"); | 
|  |  | 
|  | value->BeginArray("content_space_rect"); | 
|  | MathUtil::AddToTracedValue(rect, value); | 
|  | value->EndArray(); | 
|  |  | 
|  | bool rect_is_clipped; | 
|  | gfx::QuadF rect_as_target_space_quad = MathUtil::MapQuad( | 
|  | shared_quad_state->content_to_target_transform, | 
|  | gfx::QuadF(rect), | 
|  | &rect_is_clipped); | 
|  | value->BeginArray("rect_as_target_space_quad"); | 
|  | MathUtil::AddToTracedValue(rect_as_target_space_quad, value); | 
|  | value->EndArray(); | 
|  |  | 
|  | value->SetBoolean("rect_is_clipped", rect_is_clipped); | 
|  |  | 
|  | value->BeginArray("content_space_opaque_rect"); | 
|  | MathUtil::AddToTracedValue(opaque_rect, value); | 
|  | value->EndArray(); | 
|  |  | 
|  | bool opaque_rect_is_clipped; | 
|  | gfx::QuadF opaque_rect_as_target_space_quad = MathUtil::MapQuad( | 
|  | shared_quad_state->content_to_target_transform, | 
|  | gfx::QuadF(opaque_rect), | 
|  | &opaque_rect_is_clipped); | 
|  | value->BeginArray("opaque_rect_as_target_space_quad"); | 
|  | MathUtil::AddToTracedValue(opaque_rect_as_target_space_quad, value); | 
|  | value->EndArray(); | 
|  |  | 
|  | value->SetBoolean("opaque_rect_is_clipped", opaque_rect_is_clipped); | 
|  |  | 
|  | value->BeginArray("content_space_visible_rect"); | 
|  | MathUtil::AddToTracedValue(visible_rect, value); | 
|  | value->EndArray(); | 
|  |  | 
|  | bool visible_rect_is_clipped; | 
|  | gfx::QuadF visible_rect_as_target_space_quad = MathUtil::MapQuad( | 
|  | shared_quad_state->content_to_target_transform, | 
|  | gfx::QuadF(visible_rect), | 
|  | &visible_rect_is_clipped); | 
|  |  | 
|  | value->BeginArray("visible_rect_as_target_space_quad"); | 
|  | MathUtil::AddToTracedValue(visible_rect_as_target_space_quad, value); | 
|  | value->EndArray(); | 
|  |  | 
|  | value->SetBoolean("visible_rect_is_clipped", visible_rect_is_clipped); | 
|  |  | 
|  | value->SetBoolean("needs_blending", needs_blending); | 
|  | value->SetBoolean("should_draw_with_blending", ShouldDrawWithBlending()); | 
|  | ExtendValue(value); | 
|  | } | 
|  |  | 
|  | }  // namespace cc |