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

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: Passed(&foo) instead for Passed(foo.Pass()). 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
« no previous file with comments | « 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_.get()) 99 if (animator_.get())
(...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_.get() != has_frame) { 550 if (!!delegated_renderer_layer_.get() != 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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 canvas->Restore(); 660 canvas->Restore();
634 } 661 }
635 662
636 unsigned Layer::PrepareTexture(cc::ResourceUpdateQueue* queue) { 663 unsigned Layer::PrepareTexture(cc::ResourceUpdateQueue* queue) {
637 DCHECK(texture_layer_.get()); 664 DCHECK(texture_layer_.get());
638 return texture_->PrepareTexture(); 665 return texture_->PrepareTexture();
639 } 666 }
640 667
641 WebKit::WebGraphicsContext3D* Layer::Context3d() { 668 WebKit::WebGraphicsContext3D* Layer::Context3d() {
642 DCHECK(texture_layer_.get()); 669 DCHECK(texture_layer_.get());
643 return texture_->HostContext3D(); 670 if (texture_)
671 return texture_->HostContext3D();
672 return NULL;
644 } 673 }
645 674
646 bool Layer::PrepareTextureMailbox(cc::TextureMailbox* mailbox) { 675 bool Layer::PrepareTextureMailbox(cc::TextureMailbox* mailbox) {
647 return false; 676 return false;
648 } 677 }
649 678
650 void Layer::SetForceRenderSurface(bool force) { 679 void Layer::SetForceRenderSurface(bool force) {
651 if (force_render_surface_ == force) 680 if (force_render_surface_ == force)
652 return; 681 return;
653 682
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_); 940 transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_);
912 transform.PreconcatTransform(cc_layer_->transform()); 941 transform.PreconcatTransform(cc_layer_->transform());
913 transform.Scale(device_scale_factor_, device_scale_factor_); 942 transform.Scale(device_scale_factor_, device_scale_factor_);
914 return transform; 943 return transform;
915 } 944 }
916 945
917 void Layer::RecomputeDrawsContentAndUVRect() { 946 void Layer::RecomputeDrawsContentAndUVRect() {
918 DCHECK(cc_layer_); 947 DCHECK(cc_layer_);
919 gfx::Size size(bounds_.size()); 948 gfx::Size size(bounds_.size());
920 if (texture_layer_.get()) { 949 if (texture_layer_.get()) {
921 DCHECK(texture_.get()); 950 gfx::Size texture_size;
922 951 if (!texture_layer_->uses_mailbox()) {
923 float texture_scale_factor = 1.0f / texture_->device_scale_factor(); 952 DCHECK(texture_);
924 gfx::Size texture_size = gfx::ToFlooredSize( 953 float texture_scale_factor = 1.0f / texture_->device_scale_factor();
925 gfx::ScaleSize(texture_->size(), texture_scale_factor)); 954 texture_size = gfx::ToFlooredSize(
955 gfx::ScaleSize(texture_->size(), texture_scale_factor));
956 } else {
957 DCHECK(mailbox_.IsSharedMemory());
958 float texture_scale_factor = 1.0f / mailbox_scale_factor_;
959 texture_size = gfx::ToFlooredSize(
960 gfx::ScaleSize(mailbox_.shared_memory_size(), texture_scale_factor));
961 }
926 size.SetToMin(texture_size); 962 size.SetToMin(texture_size);
927 963
928 gfx::PointF uv_top_left(0.f, 0.f); 964 gfx::PointF uv_top_left(0.f, 0.f);
929 gfx::PointF uv_bottom_right( 965 gfx::PointF uv_bottom_right(
930 static_cast<float>(size.width())/texture_size.width(), 966 static_cast<float>(size.width())/texture_size.width(),
931 static_cast<float>(size.height())/texture_size.height()); 967 static_cast<float>(size.height())/texture_size.height());
932 texture_layer_->SetUV(uv_top_left, uv_bottom_right); 968 texture_layer_->SetUV(uv_top_left, uv_bottom_right);
933 } else if (delegated_renderer_layer_.get()) { 969 } else if (delegated_renderer_layer_.get()) {
934 delegated_renderer_layer_->SetDisplaySize( 970 delegated_renderer_layer_->SetDisplaySize(
935 ConvertSizeToPixel(this, delegated_frame_size_in_dip_)); 971 ConvertSizeToPixel(this, delegated_frame_size_in_dip_));
936 size.SetToMin(delegated_frame_size_in_dip_); 972 size.SetToMin(delegated_frame_size_in_dip_);
937 } 973 }
938 cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); 974 cc_layer_->SetBounds(ConvertSizeToPixel(this, size));
939 } 975 }
940 976
941 void Layer::RecomputePosition() { 977 void Layer::RecomputePosition() {
942 cc_layer_->SetPosition(gfx::ScalePoint( 978 cc_layer_->SetPosition(gfx::ScalePoint(
943 gfx::PointF(bounds_.x(), bounds_.y()), 979 gfx::PointF(bounds_.x(), bounds_.y()),
944 device_scale_factor_)); 980 device_scale_factor_));
945 } 981 }
946 982
947 } // namespace ui 983 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/layer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698