Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / cc / layers / render_surface_impl.cc
index af8c41a..9d36235 100644 (file)
 #include "cc/debug/debug_colors.h"
 #include "cc/layers/delegated_renderer_layer_impl.h"
 #include "cc/layers/layer_impl.h"
-#include "cc/layers/quad_sink.h"
 #include "cc/layers/render_pass_sink.h"
 #include "cc/quads/debug_border_draw_quad.h"
 #include "cc/quads/render_pass.h"
 #include "cc/quads/render_pass_draw_quad.h"
 #include "cc/quads/shared_quad_state.h"
 #include "cc/trees/damage_tracker.h"
+#include "cc/trees/occlusion_tracker.h"
 #include "third_party/skia/include/core/SkImageFilter.h"
-#include "ui/gfx/rect_conversions.h"
+#include "ui/gfx/geometry/rect_conversions.h"
 #include "ui/gfx/transform.h"
 
 namespace cc {
@@ -34,7 +34,7 @@ RenderSurfaceImpl::RenderSurfaceImpl(LayerImpl* owning_layer)
       is_clipped_(false),
       contributes_to_drawn_surface_(false),
       draw_opacity_(1),
-      nearest_occlusion_immune_ancestor_(NULL),
+      nearest_occlusion_immune_ancestor_(nullptr),
       target_render_surface_layer_index_history_(0),
       current_layer_index_history_(0) {
   damage_tracker_ = DamageTracker::Create();
@@ -66,10 +66,6 @@ void RenderSurfaceImpl::SetClipRect(const gfx::Rect& clip_rect) {
   clip_rect_ = clip_rect;
 }
 
-bool RenderSurfaceImpl::ContentsChanged() const {
-  return !damage_tracker_->current_damage_rect().IsEmpty();
-}
-
 void RenderSurfaceImpl::SetContentRect(const gfx::Rect& content_rect) {
   if (content_rect_ == content_rect)
     return;
@@ -111,11 +107,11 @@ void RenderSurfaceImpl::ClearLayerLists() {
   contributing_delegated_render_pass_layer_list_.clear();
 }
 
-RenderPass::Id RenderSurfaceImpl::RenderPassId() {
+RenderPassId RenderSurfaceImpl::GetRenderPassId() {
   int layer_id = owning_layer_->id();
   int sub_id = 0;
   DCHECK_GT(layer_id, 0);
-  return RenderPass::Id(layer_id, sub_id);
+  return RenderPassId(layer_id, sub_id);
 }
 
 void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) {
@@ -128,7 +124,7 @@ void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) {
   }
 
   scoped_ptr<RenderPass> pass = RenderPass::Create(layer_list_.size());
-  pass->SetNew(RenderPassId(),
+  pass->SetNew(GetRenderPassId(),
                content_rect_,
                gfx::IntersectRects(content_rect_,
                                    damage_tracker_->current_damage_rect()),
@@ -136,21 +132,24 @@ void RenderSurfaceImpl::AppendRenderPasses(RenderPassSink* pass_sink) {
   pass_sink->AppendRenderPass(pass.Pass());
 }
 
-void RenderSurfaceImpl::AppendQuads(QuadSink* quad_sink,
-                                    AppendQuadsData* append_quads_data,
-                                    bool for_replica,
-                                    RenderPass::Id render_pass_id) {
+void RenderSurfaceImpl::AppendQuads(
+    RenderPass* render_pass,
+    const OcclusionTracker<LayerImpl>& occlusion_tracker,
+    AppendQuadsData* append_quads_data,
+    bool for_replica,
+    RenderPassId render_pass_id) {
   DCHECK(!for_replica || owning_layer_->has_replica());
 
   const gfx::Transform& draw_transform =
       for_replica ? replica_draw_transform_ : draw_transform_;
   gfx::Rect visible_content_rect =
-      quad_sink->UnoccludedContributingSurfaceContentRect(content_rect_,
-                                                          draw_transform);
+      occlusion_tracker.UnoccludedContributingSurfaceContentRect(
+          content_rect_, draw_transform);
   if (visible_content_rect.IsEmpty())
     return;
 
-  SharedQuadState* shared_quad_state = quad_sink->CreateSharedQuadState();
+  SharedQuadState* shared_quad_state =
+      render_pass->CreateAndAppendSharedQuadState();
   shared_quad_state->SetAll(draw_transform,
                             content_rect_.size(),
                             content_rect_,
@@ -169,11 +168,10 @@ void RenderSurfaceImpl::AppendQuads(QuadSink* quad_sink,
                       owning_layer_->layer_tree_impl()) :
                   DebugColors::SurfaceBorderWidth(
                       owning_layer_->layer_tree_impl());
-    scoped_ptr<DebugBorderDrawQuad> debug_border_quad =
-        DebugBorderDrawQuad::Create();
+    DebugBorderDrawQuad* debug_border_quad =
+        render_pass->CreateAndAppendDrawQuad<DebugBorderDrawQuad>();
     debug_border_quad->SetNew(
         shared_quad_state, content_rect_, visible_content_rect, color, width);
-    quad_sink->Append(debug_border_quad.PassAs<DrawQuad>());
   }
 
   // TODO(shawnsingh): By using the same RenderSurfaceImpl for both the content
@@ -186,17 +184,20 @@ void RenderSurfaceImpl::AppendQuads(QuadSink* quad_sink,
   LayerImpl* mask_layer = owning_layer_->mask_layer();
   if (mask_layer &&
       (!mask_layer->DrawsContent() || mask_layer->bounds().IsEmpty()))
-    mask_layer = NULL;
+    mask_layer = nullptr;
 
   if (!mask_layer && for_replica) {
     mask_layer = owning_layer_->replica_layer()->mask_layer();
     if (mask_layer &&
         (!mask_layer->DrawsContent() || mask_layer->bounds().IsEmpty()))
-      mask_layer = NULL;
+      mask_layer = nullptr;
   }
 
-  gfx::RectF mask_uv_rect(0.f, 0.f, 1.f, 1.f);
+  ResourceProvider::ResourceId mask_resource_id = 0;
+  gfx::Size mask_texture_size;
+  gfx::Vector2dF mask_uv_scale;
   if (mask_layer) {
+    mask_layer->GetContentsResourceId(&mask_resource_id, &mask_texture_size);
     gfx::Vector2dF owning_layer_draw_scale =
         MathUtil::ComputeTransform2dScaleComponents(
             owning_layer_->draw_transform(), 1.f);
@@ -204,36 +205,29 @@ void RenderSurfaceImpl::AppendQuads(QuadSink* quad_sink,
         owning_layer_->content_bounds(),
         owning_layer_draw_scale.x(),
         owning_layer_draw_scale.y());
-
-    float uv_scale_x =
-        content_rect_.width() / unclipped_mask_target_size.width();
-    float uv_scale_y =
-        content_rect_.height() / unclipped_mask_target_size.height();
-
-    mask_uv_rect = gfx::RectF(
-        uv_scale_x * content_rect_.x() / content_rect_.width(),
-        uv_scale_y * content_rect_.y() / content_rect_.height(),
-        uv_scale_x,
-        uv_scale_y);
+    mask_uv_scale = gfx::Vector2dF(
+        content_rect_.width() / unclipped_mask_target_size.width(),
+        content_rect_.height() / unclipped_mask_target_size.height());
   }
 
-  ResourceProvider::ResourceId mask_resource_id =
-      mask_layer ? mask_layer->ContentsResourceId() : 0;
-  gfx::Rect contents_changed_since_last_frame =
-      ContentsChanged() ? content_rect_ : gfx::Rect();
+  DCHECK(owning_layer_->draw_properties().target_space_transform.IsScale2d());
+  gfx::Vector2dF owning_layer_to_target_scale =
+      owning_layer_->draw_properties().target_space_transform.Scale2d();
+  owning_layer_to_target_scale.Scale(owning_layer_->contents_scale_x(),
+                                     owning_layer_->contents_scale_y());
 
-  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
+  RenderPassDrawQuad* quad =
+      render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
   quad->SetNew(shared_quad_state,
                content_rect_,
                visible_content_rect,
                render_pass_id,
-               for_replica,
                mask_resource_id,
-               contents_changed_since_last_frame,
-               mask_uv_rect,
+               mask_uv_scale,
+               mask_texture_size,
                owning_layer_->filters(),
+               owning_layer_to_target_scale,
                owning_layer_->background_filters());
-  quad_sink->Append(quad.PassAs<DrawQuad>());
 }
 
 }  // namespace cc