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

Side by Side Diff: ui/compositor/layer.cc

Issue 15001027: [Aura] Added Support for rendering software compositor frames as cc::TextureLayers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More changes from the notes. Created 7 years, 6 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
« cc/resources/texture_mailbox.cc ('K') | « ui/compositor/layer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "ui/compositor/layer.h" 5 #include "ui/compositor/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 background_blur_radius_(0), 79 background_blur_radius_(0),
80 layer_saturation_(0.0f), 80 layer_saturation_(0.0f),
81 layer_brightness_(0.0f), 81 layer_brightness_(0.0f),
82 layer_grayscale_(0.0f), 82 layer_grayscale_(0.0f),
83 layer_inverted_(false), 83 layer_inverted_(false),
84 layer_mask_(NULL), 84 layer_mask_(NULL),
85 layer_mask_back_link_(NULL), 85 layer_mask_back_link_(NULL),
86 zoom_(1), 86 zoom_(1),
87 zoom_inset_(0), 87 zoom_inset_(0),
88 delegate_(NULL), 88 delegate_(NULL),
89 cc_layer_(NULL),
89 scale_content_(true), 90 scale_content_(true),
90 device_scale_factor_(1.0f) { 91 device_scale_factor_(1.0f) {
91 CreateWebLayer(); 92 CreateWebLayer();
92 } 93 }
93 94
94 Layer::~Layer() { 95 Layer::~Layer() {
95 // Destroying the animator may cause observers to use the layer (and 96 // Destroying the animator may cause observers to use the layer (and
96 // indirectly the WebLayer). Destroy the animator first so that the WebLayer 97 // indirectly the WebLayer). Destroy the animator first so that the WebLayer
97 // is still around. 98 // is still around.
98 if (animator_) 99 if (animator_)
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 } else { 508 } else {
508 scoped_refptr<cc::ContentLayer> new_layer = 509 scoped_refptr<cc::ContentLayer> new_layer =
509 cc::ContentLayer::Create(this); 510 cc::ContentLayer::Create(this);
510 SwitchToLayer(new_layer); 511 SwitchToLayer(new_layer);
511 content_layer_ = new_layer; 512 content_layer_ = new_layer;
512 } 513 }
513 } 514 }
514 RecomputeDrawsContentAndUVRect(); 515 RecomputeDrawsContentAndUVRect();
515 } 516 }
516 517
518 void Layer::SetTextureMailbox(const cc::TextureMailbox& mailbox,
519 float scale_factor) {
520 DCHECK_EQ(type_, LAYER_TEXTURED);
521 DCHECK(!solid_color_layer_);
522 layer_updated_externally_ = true;
523 texture_ = NULL;
524 if (!texture_layer_ || !texture_layer_->uses_mailbox()) {
525 scoped_refptr<cc::TextureLayer> new_layer =
526 cc::TextureLayer::CreateForMailbox(this);
527 new_layer->SetFlipped(false);
528 SwitchToLayer(new_layer);
529 texture_layer_ = new_layer;
530 }
531 texture_layer_->SetTextureMailbox(mailbox);
532 mailbox_ = mailbox;
533 mailbox_scale_factor_ = scale_factor;
534 RecomputeDrawsContentAndUVRect();
535 }
536
537 cc::TextureMailbox Layer::GetTextureMailbox(float* scale_factor) {
538 if (scale_factor)
539 *scale_factor = mailbox_scale_factor_;
540 cc::TextureMailbox::ReleaseCallback callback;
541 return mailbox_.CopyWithNewCallback(callback);
542 }
543
517 void Layer::SetDelegatedFrame(scoped_ptr<cc::DelegatedFrameData> frame, 544 void Layer::SetDelegatedFrame(scoped_ptr<cc::DelegatedFrameData> frame,
518 gfx::Size frame_size_in_dip) { 545 gfx::Size frame_size_in_dip) {
519 DCHECK_EQ(type_, LAYER_TEXTURED); 546 DCHECK_EQ(type_, LAYER_TEXTURED);
520 bool has_frame = frame.get() && !frame->render_pass_list.empty(); 547 bool has_frame = frame.get() && !frame->render_pass_list.empty();
521 layer_updated_externally_ = has_frame; 548 layer_updated_externally_ = has_frame;
522 delegated_frame_size_in_dip_ = frame_size_in_dip; 549 delegated_frame_size_in_dip_ = frame_size_in_dip;
523 if (!!delegated_renderer_layer_ != has_frame) { 550 if (!!delegated_renderer_layer_ != has_frame) {
524 if (has_frame) { 551 if (has_frame) {
525 scoped_refptr<cc::DelegatedRendererLayer> new_layer = 552 scoped_refptr<cc::DelegatedRendererLayer> new_layer =
526 cc::DelegatedRendererLayer::Create(NULL); 553 cc::DelegatedRendererLayer::Create(NULL);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 } 656 }
630 657
631 if (delegate_) 658 if (delegate_)
632 delegate_->OnPaintLayer(canvas.get()); 659 delegate_->OnPaintLayer(canvas.get());
633 if (scale_content) 660 if (scale_content)
634 canvas->Restore(); 661 canvas->Restore();
635 } 662 }
636 663
637 unsigned Layer::PrepareTexture(cc::ResourceUpdateQueue* queue) { 664 unsigned Layer::PrepareTexture(cc::ResourceUpdateQueue* queue) {
638 DCHECK(texture_layer_); 665 DCHECK(texture_layer_);
639 return texture_->PrepareTexture(); 666 if (texture_)
667 return texture_->PrepareTexture();
668 return 0;
640 } 669 }
641 670
642 WebKit::WebGraphicsContext3D* Layer::Context3d() { 671 WebKit::WebGraphicsContext3D* Layer::Context3d() {
643 DCHECK(texture_layer_); 672 DCHECK(texture_layer_);
644 return texture_->HostContext3D(); 673 if (texture_)
674 return texture_->HostContext3D();
675 return NULL;
645 } 676 }
646 677
647 bool Layer::PrepareTextureMailbox(cc::TextureMailbox* mailbox) { 678 bool Layer::PrepareTextureMailbox(cc::TextureMailbox* mailbox) {
648 return false; 679 return false;
649 } 680 }
650 681
651 void Layer::SetForceRenderSurface(bool force) { 682 void Layer::SetForceRenderSurface(bool force) {
652 if (force_render_surface_ == force) 683 if (force_render_surface_ == force)
653 return; 684 return;
654 685
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_); 943 transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_);
913 transform.PreconcatTransform(cc_layer_->transform()); 944 transform.PreconcatTransform(cc_layer_->transform());
914 transform.Scale(device_scale_factor_, device_scale_factor_); 945 transform.Scale(device_scale_factor_, device_scale_factor_);
915 return transform; 946 return transform;
916 } 947 }
917 948
918 void Layer::RecomputeDrawsContentAndUVRect() { 949 void Layer::RecomputeDrawsContentAndUVRect() {
919 DCHECK(cc_layer_); 950 DCHECK(cc_layer_);
920 gfx::Size size(bounds_.size()); 951 gfx::Size size(bounds_.size());
921 if (texture_layer_.get()) { 952 if (texture_layer_.get()) {
922 DCHECK(texture_); 953 gfx::Size texture_size;
923 954 if (!texture_layer_->uses_mailbox()) {
924 float texture_scale_factor = 1.0f / texture_->device_scale_factor(); 955 DCHECK(texture_);
925 gfx::Size texture_size = gfx::ToFlooredSize( 956 float texture_scale_factor = 1.0f / texture_->device_scale_factor();
926 gfx::ScaleSize(texture_->size(), texture_scale_factor)); 957 texture_size = gfx::ToFlooredSize(
958 gfx::ScaleSize(texture_->size(), texture_scale_factor));
959 } else {
960 DCHECK(mailbox_.IsSharedMemory());
961 float texture_scale_factor = 1.0f / mailbox_scale_factor_;
962 texture_size = gfx::ToFlooredSize(
963 gfx::ScaleSize(mailbox_.shared_memory_size(), texture_scale_factor));
964 }
927 size.ClampToMax(texture_size); 965 size.ClampToMax(texture_size);
928 966
929 gfx::PointF uv_top_left(0.f, 0.f); 967 gfx::PointF uv_top_left(0.f, 0.f);
930 gfx::PointF uv_bottom_right( 968 gfx::PointF uv_bottom_right(
931 static_cast<float>(size.width())/texture_size.width(), 969 static_cast<float>(size.width())/texture_size.width(),
932 static_cast<float>(size.height())/texture_size.height()); 970 static_cast<float>(size.height())/texture_size.height());
933 texture_layer_->SetUV(uv_top_left, uv_bottom_right); 971 texture_layer_->SetUV(uv_top_left, uv_bottom_right);
934 } else if (delegated_renderer_layer_.get()) { 972 } else if (delegated_renderer_layer_.get()) {
935 delegated_renderer_layer_->SetDisplaySize( 973 delegated_renderer_layer_->SetDisplaySize(
936 ConvertSizeToPixel(this, delegated_frame_size_in_dip_)); 974 ConvertSizeToPixel(this, delegated_frame_size_in_dip_));
937 size.ClampToMax(delegated_frame_size_in_dip_); 975 size.ClampToMax(delegated_frame_size_in_dip_);
938 } 976 }
939 cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); 977 cc_layer_->SetBounds(ConvertSizeToPixel(this, size));
940 } 978 }
941 979
942 void Layer::RecomputePosition() { 980 void Layer::RecomputePosition() {
943 cc_layer_->SetPosition(gfx::ScalePoint( 981 cc_layer_->SetPosition(gfx::ScalePoint(
944 gfx::PointF(bounds_.x(), bounds_.y()), 982 gfx::PointF(bounds_.x(), bounds_.y()),
945 device_scale_factor_)); 983 device_scale_factor_));
946 } 984 }
947 985
948 } // namespace ui 986 } // namespace ui
OLDNEW
« cc/resources/texture_mailbox.cc ('K') | « ui/compositor/layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698