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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 219963015: Remove non-delegated paths on Android (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | « content/browser/renderer_host/render_widget_host_view_android.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 "content/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "base/android/sys_utils.h" 9 #include "base/android/sys_utils.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
17 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
18 #include "base/threading/worker_pool.h" 18 #include "base/threading/worker_pool.h"
19 #include "cc/base/latency_info_swap_promise.h" 19 #include "cc/base/latency_info_swap_promise.h"
20 #include "cc/layers/delegated_frame_provider.h" 20 #include "cc/layers/delegated_frame_provider.h"
21 #include "cc/layers/delegated_renderer_layer.h" 21 #include "cc/layers/delegated_renderer_layer.h"
22 #include "cc/layers/layer.h" 22 #include "cc/layers/layer.h"
23 #include "cc/layers/texture_layer.h"
24 #include "cc/output/compositor_frame.h" 23 #include "cc/output/compositor_frame.h"
25 #include "cc/output/compositor_frame_ack.h" 24 #include "cc/output/compositor_frame_ack.h"
26 #include "cc/output/copy_output_request.h" 25 #include "cc/output/copy_output_request.h"
27 #include "cc/output/copy_output_result.h" 26 #include "cc/output/copy_output_result.h"
28 #include "cc/resources/single_release_callback.h" 27 #include "cc/resources/single_release_callback.h"
29 #include "cc/trees/layer_tree_host.h" 28 #include "cc/trees/layer_tree_host.h"
30 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 29 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
31 #include "content/browser/android/content_view_core_impl.h" 30 #include "content/browser/android/content_view_core_impl.h"
32 #include "content/browser/android/in_process/synchronous_compositor_impl.h" 31 #include "content/browser/android/in_process/synchronous_compositor_impl.h"
33 #include "content/browser/android/overscroll_glow.h" 32 #include "content/browser/android/overscroll_glow.h"
(...skipping 29 matching lines...) Expand all
63 #include "ui/gfx/screen.h" 62 #include "ui/gfx/screen.h"
64 #include "ui/gfx/size_conversions.h" 63 #include "ui/gfx/size_conversions.h"
65 64
66 namespace content { 65 namespace content {
67 66
68 namespace { 67 namespace {
69 68
70 const int kUndefinedOutputSurfaceId = -1; 69 const int kUndefinedOutputSurfaceId = -1;
71 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime"; 70 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime";
72 71
73 void InsertSyncPointAndAckForCompositor(
74 int renderer_host_id,
75 uint32 output_surface_id,
76 int route_id,
77 const gpu::Mailbox& return_mailbox,
78 const gfx::Size return_size) {
79 cc::CompositorFrameAck ack;
80 ack.gl_frame_data.reset(new cc::GLFrameData());
81 if (!return_mailbox.IsZero()) {
82 ack.gl_frame_data->mailbox = return_mailbox;
83 ack.gl_frame_data->size = return_size;
84 ack.gl_frame_data->sync_point =
85 ImageTransportFactoryAndroid::GetInstance()->InsertSyncPoint();
86 }
87 RenderWidgetHostImpl::SendSwapCompositorFrameAck(
88 route_id, output_surface_id, renderer_host_id, ack);
89 }
90
91 // Sends an acknowledgement to the renderer of a processed IME event. 72 // Sends an acknowledgement to the renderer of a processed IME event.
92 void SendImeEventAck(RenderWidgetHostImpl* host) { 73 void SendImeEventAck(RenderWidgetHostImpl* host) {
93 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID())); 74 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID()));
94 } 75 }
95 76
96 void CopyFromCompositingSurfaceFinished( 77 void CopyFromCompositingSurfaceFinished(
97 const base::Callback<void(bool, const SkBitmap&)>& callback, 78 const base::Callback<void(bool, const SkBitmap&)>& callback,
98 scoped_ptr<cc::SingleReleaseCallback> release_callback, 79 scoped_ptr<cc::SingleReleaseCallback> release_callback,
99 scoped_ptr<SkBitmap> bitmap, 80 scoped_ptr<SkBitmap> bitmap,
100 const base::TimeTicks& start_time, 81 const base::TimeTicks& start_time,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 115
135 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 116 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
136 RenderWidgetHostImpl* widget_host, 117 RenderWidgetHostImpl* widget_host,
137 ContentViewCoreImpl* content_view_core) 118 ContentViewCoreImpl* content_view_core)
138 : host_(widget_host), 119 : host_(widget_host),
139 needs_begin_frame_(false), 120 needs_begin_frame_(false),
140 is_showing_(!widget_host->is_hidden()), 121 is_showing_(!widget_host->is_hidden()),
141 content_view_core_(NULL), 122 content_view_core_(NULL),
142 ime_adapter_android_(this), 123 ime_adapter_android_(this),
143 cached_background_color_(SK_ColorWHITE), 124 cached_background_color_(SK_ColorWHITE),
144 texture_id_in_layer_(0),
145 last_output_surface_id_(kUndefinedOutputSurfaceId), 125 last_output_surface_id_(kUndefinedOutputSurfaceId),
146 weak_ptr_factory_(this), 126 weak_ptr_factory_(this),
147 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( 127 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch(
148 switches::kDisableOverscrollEdgeEffect)), 128 switches::kDisableOverscrollEdgeEffect)),
149 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), 129 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)),
150 flush_input_requested_(false), 130 flush_input_requested_(false),
151 accelerated_surface_route_id_(0), 131 accelerated_surface_route_id_(0),
152 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( 132 using_synchronous_compositor_(SynchronousCompositorImpl::FromID(
153 widget_host->GetProcess()->GetID(), 133 widget_host->GetProcess()->GetID(),
154 widget_host->GetRoutingID()) != NULL), 134 widget_host->GetRoutingID()) != NULL),
155 frame_evictor_(new DelegatedFrameEvictor(this)), 135 frame_evictor_(new DelegatedFrameEvictor(this)),
156 using_delegated_renderer_(IsDelegatedRendererEnabled()),
157 locks_on_frame_count_(0), 136 locks_on_frame_count_(0),
158 root_window_destroyed_(false) { 137 root_window_destroyed_(false) {
159 if (!using_delegated_renderer_) {
160 texture_layer_ = cc::TextureLayer::Create(NULL);
161 layer_ = texture_layer_;
162 }
163
164 host_->SetView(this); 138 host_->SetView(this);
165 SetContentViewCore(content_view_core); 139 SetContentViewCore(content_view_core);
166 ImageTransportFactoryAndroid::AddObserver(this); 140 ImageTransportFactoryAndroid::AddObserver(this);
167 } 141 }
168 142
169 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { 143 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() {
170 ImageTransportFactoryAndroid::RemoveObserver(this); 144 ImageTransportFactoryAndroid::RemoveObserver(this);
171 SetContentViewCore(NULL); 145 SetContentViewCore(NULL);
172 DCHECK(ack_callbacks_.empty()); 146 DCHECK(ack_callbacks_.empty());
173 if (texture_id_in_layer_) {
174 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture(
175 texture_id_in_layer_);
176 }
177
178 if (texture_layer_.get())
179 texture_layer_->ClearClient();
180
181 if (resource_collection_.get()) 147 if (resource_collection_.get())
182 resource_collection_->SetClient(NULL); 148 resource_collection_->SetClient(NULL);
183 } 149 }
184 150
185 151
186 bool RenderWidgetHostViewAndroid::OnMessageReceived( 152 bool RenderWidgetHostViewAndroid::OnMessageReceived(
187 const IPC::Message& message) { 153 const IPC::Message& message) {
188 bool handled = true; 154 bool handled = true;
189 IPC_BEGIN_MESSAGE_MAP(RenderWidgetHostViewAndroid, message) 155 IPC_BEGIN_MESSAGE_MAP(RenderWidgetHostViewAndroid, message)
190 IPC_MESSAGE_HANDLER(ViewHostMsg_StartContentIntent, OnStartContentIntent) 156 IPC_MESSAGE_HANDLER(ViewHostMsg_StartContentIntent, OnStartContentIntent)
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 return false; 255 return false;
290 if (!layer_) 256 if (!layer_)
291 return false; 257 return false;
292 258
293 if (texture_size_in_layer_.IsEmpty()) 259 if (texture_size_in_layer_.IsEmpty())
294 return false; 260 return false;
295 261
296 if (!frame_evictor_->HasFrame()) 262 if (!frame_evictor_->HasFrame())
297 return false; 263 return false;
298 264
299 if (using_delegated_renderer_) {
300 if (!delegated_renderer_layer_.get())
301 return false;
302 } else {
303 if (texture_id_in_layer_ == 0)
304 return false;
305 }
306
307 return true; 265 return true;
308 } 266 }
309 267
310 gfx::NativeView RenderWidgetHostViewAndroid::GetNativeView() const { 268 gfx::NativeView RenderWidgetHostViewAndroid::GetNativeView() const {
311 return content_view_core_->GetViewAndroid(); 269 return content_view_core_->GetViewAndroid();
312 } 270 }
313 271
314 gfx::NativeViewId RenderWidgetHostViewAndroid::GetNativeViewId() const { 272 gfx::NativeViewId RenderWidgetHostViewAndroid::GetNativeViewId() const {
315 return reinterpret_cast<gfx::NativeViewId>( 273 return reinterpret_cast<gfx::NativeViewId>(
316 const_cast<RenderWidgetHostViewAndroid*>(this)); 274 const_cast<RenderWidgetHostViewAndroid*>(this));
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 if (using_synchronous_compositor_) { 611 if (using_synchronous_compositor_) {
654 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback, 612 SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback,
655 bitmap_config); 613 bitmap_config);
656 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", 614 UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous",
657 base::TimeTicks::Now() - start_time); 615 base::TimeTicks::Now() - start_time);
658 return; 616 return;
659 } 617 }
660 618
661 scoped_ptr<cc::CopyOutputRequest> request; 619 scoped_ptr<cc::CopyOutputRequest> request;
662 scoped_refptr<cc::Layer> readback_layer; 620 scoped_refptr<cc::Layer> readback_layer;
663 if (using_delegated_renderer_) { 621 DCHECK(content_view_core_);
664 DCHECK(content_view_core_); 622 DCHECK(content_view_core_->GetWindowAndroid());
665 DCHECK(content_view_core_->GetWindowAndroid()); 623 ui::WindowAndroidCompositor* compositor =
666 ui::WindowAndroidCompositor* compositor = 624 content_view_core_->GetWindowAndroid()->GetCompositor();
667 content_view_core_->GetWindowAndroid()->GetCompositor(); 625 DCHECK(compositor);
668 DCHECK(compositor); 626 DCHECK(frame_provider_);
669 DCHECK(frame_provider_); 627 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer =
670 scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = 628 cc::DelegatedRendererLayer::Create(frame_provider_);
671 cc::DelegatedRendererLayer::Create(frame_provider_); 629 delegated_layer->SetDisplaySize(texture_size_in_layer_);
672 delegated_layer->SetDisplaySize(texture_size_in_layer_); 630 delegated_layer->SetBounds(content_size_in_layer_);
673 delegated_layer->SetBounds(content_size_in_layer_); 631 delegated_layer->SetHideLayerAndSubtree(true);
674 delegated_layer->SetHideLayerAndSubtree(true); 632 delegated_layer->SetIsDrawable(true);
675 delegated_layer->SetIsDrawable(true); 633 delegated_layer->SetContentsOpaque(true);
676 delegated_layer->SetContentsOpaque(true); 634 compositor->AttachLayerForReadback(delegated_layer);
677 compositor->AttachLayerForReadback(delegated_layer);
678 635
679 readback_layer = delegated_layer; 636 readback_layer = delegated_layer;
680 request = cc::CopyOutputRequest::CreateRequest( 637 request = cc::CopyOutputRequest::CreateRequest(
681 base::Bind(&RenderWidgetHostViewAndroid:: 638 base::Bind(&RenderWidgetHostViewAndroid::
682 PrepareTextureCopyOutputResultForDelegatedReadback, 639 PrepareTextureCopyOutputResultForDelegatedReadback,
683 dst_size_in_pixel, 640 dst_size_in_pixel,
684 bitmap_config, 641 bitmap_config,
685 start_time, 642 start_time,
686 readback_layer, 643 readback_layer,
687 callback)); 644 callback));
688 } else {
689 readback_layer = layer_;
690 request = cc::CopyOutputRequest::CreateRequest(
691 base::Bind(&RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult,
692 dst_size_in_pixel,
693 bitmap_config,
694 start_time,
695 callback));
696 }
697 request->set_area(src_subrect_in_pixel); 645 request->set_area(src_subrect_in_pixel);
698 readback_layer->RequestCopyOfOutput(request.Pass()); 646 readback_layer->RequestCopyOfOutput(request.Pass());
699 } 647 }
700 648
701 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame( 649 void RenderWidgetHostViewAndroid::CopyFromCompositingSurfaceToVideoFrame(
702 const gfx::Rect& src_subrect, 650 const gfx::Rect& src_subrect,
703 const scoped_refptr<media::VideoFrame>& target, 651 const scoped_refptr<media::VideoFrame>& target,
704 const base::Callback<void(bool)>& callback) { 652 const base::Callback<void(bool)>& callback) {
705 NOTIMPLEMENTED(); 653 NOTIMPLEMENTED();
706 callback.Run(false); 654 callback.Run(false);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 704
757 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { 705 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() {
758 if (ack_callbacks_.size()) 706 if (ack_callbacks_.size())
759 return; 707 return;
760 SendReturnedDelegatedResources(last_output_surface_id_); 708 SendReturnedDelegatedResources(last_output_surface_id_);
761 } 709 }
762 710
763 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { 711 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
764 RemoveLayers(); 712 RemoveLayers();
765 frame_provider_ = NULL; 713 frame_provider_ = NULL;
766 delegated_renderer_layer_ = NULL;
767 layer_ = NULL; 714 layer_ = NULL;
768 } 715 }
769 716
770 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( 717 void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
771 uint32 output_surface_id, 718 uint32 output_surface_id,
772 scoped_ptr<cc::DelegatedFrameData> frame_data) { 719 scoped_ptr<cc::DelegatedFrameData> frame_data) {
773 bool has_content = !texture_size_in_layer_.IsEmpty(); 720 bool has_content = !texture_size_in_layer_.IsEmpty();
774 721
775 if (output_surface_id != last_output_surface_id_) { 722 if (output_surface_id != last_output_surface_id_) {
776 // Drop the cc::DelegatedFrameResourceCollection so that we will not return 723 // Drop the cc::DelegatedFrameResourceCollection so that we will not return
(...skipping 15 matching lines...) Expand all
792 } else { 739 } else {
793 if (!resource_collection_.get()) { 740 if (!resource_collection_.get()) {
794 resource_collection_ = new cc::DelegatedFrameResourceCollection; 741 resource_collection_ = new cc::DelegatedFrameResourceCollection;
795 resource_collection_->SetClient(this); 742 resource_collection_->SetClient(this);
796 } 743 }
797 if (!frame_provider_ || 744 if (!frame_provider_ ||
798 texture_size_in_layer_ != frame_provider_->frame_size()) { 745 texture_size_in_layer_ != frame_provider_->frame_size()) {
799 RemoveLayers(); 746 RemoveLayers();
800 frame_provider_ = new cc::DelegatedFrameProvider( 747 frame_provider_ = new cc::DelegatedFrameProvider(
801 resource_collection_.get(), frame_data.Pass()); 748 resource_collection_.get(), frame_data.Pass());
802 delegated_renderer_layer_ = 749 layer_ = cc::DelegatedRendererLayer::Create(frame_provider_);
803 cc::DelegatedRendererLayer::Create(frame_provider_);
804 layer_ = delegated_renderer_layer_;
805 AttachLayers(); 750 AttachLayers();
806 } else { 751 } else {
807 frame_provider_->SetFrameData(frame_data.Pass()); 752 frame_provider_->SetFrameData(frame_data.Pass());
808 } 753 }
809 } 754 }
810 755
811 if (delegated_renderer_layer_.get()) { 756 if (layer_.get()) {
812 delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); 757 layer_->SetDisplaySize(texture_size_in_layer_);
813 delegated_renderer_layer_->SetIsDrawable(true); 758 layer_->SetIsDrawable(true);
814 delegated_renderer_layer_->SetContentsOpaque(true); 759 layer_->SetContentsOpaque(true);
815 delegated_renderer_layer_->SetBounds(content_size_in_layer_); 760 layer_->SetBounds(content_size_in_layer_);
816 delegated_renderer_layer_->SetNeedsDisplay(); 761 layer_->SetNeedsDisplay();
817 } 762 }
818 763
819 base::Closure ack_callback = 764 base::Closure ack_callback =
820 base::Bind(&RenderWidgetHostViewAndroid::SendDelegatedFrameAck, 765 base::Bind(&RenderWidgetHostViewAndroid::SendDelegatedFrameAck,
821 weak_ptr_factory_.GetWeakPtr(), 766 weak_ptr_factory_.GetWeakPtr(),
822 output_surface_id); 767 output_surface_id);
823 768
824 ack_callbacks_.push(ack_callback); 769 ack_callbacks_.push(ack_callback);
825 if (host_->is_hidden()) 770 if (host_->is_hidden())
826 RunAckCallbacks(); 771 RunAckCallbacks();
(...skipping 10 matching lines...) Expand all
837 content_size_in_layer_ = 782 content_size_in_layer_ =
838 gfx::Size(texture_size_in_layer_.width() - offset.x(), 783 gfx::Size(texture_size_in_layer_.width() - offset.x(),
839 texture_size_in_layer_.height() - offset.y()); 784 texture_size_in_layer_.height() - offset.y());
840 // Content size changes should be reflected in associated animation effects. 785 // Content size changes should be reflected in associated animation effects.
841 UpdateAnimationSize(frame_metadata); 786 UpdateAnimationSize(frame_metadata);
842 } 787 }
843 788
844 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( 789 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
845 uint32 output_surface_id, 790 uint32 output_surface_id,
846 scoped_ptr<cc::CompositorFrame> frame) { 791 scoped_ptr<cc::CompositorFrame> frame) {
792 if (!frame->delegated_frame_data) {
793 LOG(ERROR) << "Non-delegated renderer path no longer supported";
794 return;
795 }
796
847 if (locks_on_frame_count_ > 0) { 797 if (locks_on_frame_count_ > 0) {
848 DCHECK(HasValidFrame()); 798 DCHECK(HasValidFrame());
849 RetainFrame(output_surface_id, frame.Pass()); 799 RetainFrame(output_surface_id, frame.Pass());
850 return; 800 return;
851 } 801 }
852 802
853 // Always let ContentViewCore know about the new frame first, so it can decide 803 // Always let ContentViewCore know about the new frame first, so it can decide
854 // to schedule a Draw immediately when it sees the texture layer invalidation. 804 // to schedule a Draw immediately when it sees the texture layer invalidation.
855 UpdateContentViewCoreFrameMetadata(frame->metadata); 805 UpdateContentViewCoreFrameMetadata(frame->metadata);
856 806
857 if (layer_ && layer_->layer_tree_host()) { 807 if (layer_ && layer_->layer_tree_host()) {
858 for (size_t i = 0; i < frame->metadata.latency_info.size(); i++) { 808 for (size_t i = 0; i < frame->metadata.latency_info.size(); i++) {
859 scoped_ptr<cc::SwapPromise> swap_promise( 809 scoped_ptr<cc::SwapPromise> swap_promise(
860 new cc::LatencyInfoSwapPromise(frame->metadata.latency_info[i])); 810 new cc::LatencyInfoSwapPromise(frame->metadata.latency_info[i]));
861 layer_->layer_tree_host()->QueueSwapPromise(swap_promise.Pass()); 811 layer_->layer_tree_host()->QueueSwapPromise(swap_promise.Pass());
862 } 812 }
863 } 813 }
864 814
865 if (frame->delegated_frame_data) { 815 DCHECK(!frame->delegated_frame_data->render_pass_list.empty());
866 DCHECK(using_delegated_renderer_);
867 816
868 DCHECK(frame->delegated_frame_data); 817 cc::RenderPass* root_pass =
869 DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); 818 frame->delegated_frame_data->render_pass_list.back();
870 819 texture_size_in_layer_ = root_pass->output_rect.size();
871 cc::RenderPass* root_pass =
872 frame->delegated_frame_data->render_pass_list.back();
873 texture_size_in_layer_ = root_pass->output_rect.size();
874 ComputeContentsSize(frame->metadata);
875
876 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
877 frame_evictor_->SwappedFrame(!host_->is_hidden());
878 return;
879 }
880
881 DCHECK(!using_delegated_renderer_);
882
883 if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero())
884 return;
885
886 if (output_surface_id != last_output_surface_id_) {
887 current_mailbox_ = gpu::Mailbox();
888 last_output_surface_id_ = kUndefinedOutputSurfaceId;
889 }
890
891 base::Closure callback = base::Bind(&InsertSyncPointAndAckForCompositor,
892 host_->GetProcess()->GetID(),
893 output_surface_id,
894 host_->GetRoutingID(),
895 current_mailbox_,
896 texture_size_in_layer_);
897 ImageTransportFactoryAndroid::GetInstance()->WaitSyncPoint(
898 frame->gl_frame_data->sync_point);
899
900 texture_size_in_layer_ = frame->gl_frame_data->size;
901 ComputeContentsSize(frame->metadata); 820 ComputeContentsSize(frame->metadata);
902 821
903 BuffersSwapped(frame->gl_frame_data->mailbox, output_surface_id, callback); 822 SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass());
904 frame_evictor_->SwappedFrame(!host_->is_hidden()); 823 frame_evictor_->SwappedFrame(!host_->is_hidden());
905 } 824 }
906 825
907 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame( 826 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame(
908 uint32 output_surface_id, 827 uint32 output_surface_id,
909 scoped_ptr<cc::CompositorFrame> frame) { 828 scoped_ptr<cc::CompositorFrame> frame) {
910 InternalSwapCompositorFrame(output_surface_id, frame.Pass()); 829 InternalSwapCompositorFrame(output_surface_id, frame.Pass());
911 } 830 }
912 831
913 void RenderWidgetHostViewAndroid::RetainFrame( 832 void RenderWidgetHostViewAndroid::RetainFrame(
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 int route_id) { 922 int route_id) {
1004 accelerated_surface_route_id_ = route_id; 923 accelerated_surface_route_id_ = route_id;
1005 } 924 }
1006 925
1007 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped( 926 void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped(
1008 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params, 927 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
1009 int gpu_host_id) { 928 int gpu_host_id) {
1010 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; 929 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer";
1011 } 930 }
1012 931
1013 void RenderWidgetHostViewAndroid::BuffersSwapped(
1014 const gpu::Mailbox& mailbox,
1015 uint32_t output_surface_id,
1016 const base::Closure& ack_callback) {
1017 ImageTransportFactoryAndroid* factory =
1018 ImageTransportFactoryAndroid::GetInstance();
1019
1020 if (!texture_id_in_layer_) {
1021 texture_id_in_layer_ = factory->CreateTexture();
1022 texture_layer_->SetTextureId(texture_id_in_layer_);
1023 texture_layer_->SetIsDrawable(true);
1024 texture_layer_->SetContentsOpaque(true);
1025 }
1026
1027 ImageTransportFactoryAndroid::GetInstance()->AcquireTexture(
1028 texture_id_in_layer_, mailbox.name);
1029
1030 current_mailbox_ = mailbox;
1031 last_output_surface_id_ = output_surface_id;
1032
1033 ack_callbacks_.push(ack_callback);
1034 if (host_->is_hidden())
1035 RunAckCallbacks();
1036 }
1037
1038 void RenderWidgetHostViewAndroid::AttachLayers() { 932 void RenderWidgetHostViewAndroid::AttachLayers() {
1039 if (!content_view_core_) 933 if (!content_view_core_)
1040 return; 934 return;
1041 if (!layer_.get()) 935 if (!layer_.get())
1042 return; 936 return;
1043 937
1044 content_view_core_->AttachLayer(layer_); 938 content_view_core_->AttachLayer(layer_);
1045 if (overscroll_effect_enabled_) 939 if (overscroll_effect_enabled_)
1046 overscroll_effect_->Enable(); 940 overscroll_effect_->Enable();
1047 layer_->SetHideLayerAndSubtree(!is_showing_); 941 layer_->SetHideLayerAndSubtree(!is_showing_);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 975
1082 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { 976 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() {
1083 NOTREACHED(); 977 NOTREACHED();
1084 } 978 }
1085 979
1086 void RenderWidgetHostViewAndroid::AcceleratedSurfaceRelease() { 980 void RenderWidgetHostViewAndroid::AcceleratedSurfaceRelease() {
1087 NOTREACHED(); 981 NOTREACHED();
1088 } 982 }
1089 983
1090 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { 984 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() {
1091 if (texture_id_in_layer_) { 985 if (layer_.get())
1092 texture_layer_->SetTextureId(0);
1093 texture_layer_->SetIsDrawable(false);
1094 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture(
1095 texture_id_in_layer_);
1096 texture_id_in_layer_ = 0;
1097 current_mailbox_ = gpu::Mailbox();
1098 last_output_surface_id_ = kUndefinedOutputSurfaceId;
1099 }
1100 if (delegated_renderer_layer_.get())
1101 DestroyDelegatedContent(); 986 DestroyDelegatedContent();
1102 frame_evictor_->DiscardedFrame(); 987 frame_evictor_->DiscardedFrame();
1103 } 988 }
1104 989
1105 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface( 990 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface(
1106 const gfx::Size& desired_size) { 991 const gfx::Size& desired_size) {
1107 NOTREACHED(); 992 NOTREACHED();
1108 return false; 993 return false;
1109 } 994 }
1110 995
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1377 1262
1378 void RenderWidgetHostViewAndroid::OnDetachCompositor() { 1263 void RenderWidgetHostViewAndroid::OnDetachCompositor() {
1379 DCHECK(content_view_core_); 1264 DCHECK(content_view_core_);
1380 DCHECK(!using_synchronous_compositor_); 1265 DCHECK(!using_synchronous_compositor_);
1381 root_window_destroyed_ = true; 1266 root_window_destroyed_ = true;
1382 RunAckCallbacks(); 1267 RunAckCallbacks();
1383 } 1268 }
1384 1269
1385 void RenderWidgetHostViewAndroid::OnLostResources() { 1270 void RenderWidgetHostViewAndroid::OnLostResources() {
1386 ReleaseLocksOnSurface(); 1271 ReleaseLocksOnSurface();
1387 if (texture_layer_.get()) 1272 if (layer_.get())
1388 texture_layer_->SetIsDrawable(false);
1389 if (delegated_renderer_layer_.get())
1390 DestroyDelegatedContent(); 1273 DestroyDelegatedContent();
1391 texture_id_in_layer_ = 0;
1392 DCHECK(ack_callbacks_.empty()); 1274 DCHECK(ack_callbacks_.empty());
1393 } 1275 }
1394 1276
1395 // static 1277 // static
1396 void 1278 void
1397 RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResultForDelegatedReadback( 1279 RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResultForDelegatedReadback(
1398 const gfx::Size& dst_size_in_pixel, 1280 const gfx::Size& dst_size_in_pixel,
1399 const SkBitmap::Config config, 1281 const SkBitmap::Config config,
1400 const base::TimeTicks& start_time, 1282 const base::TimeTicks& start_time,
1401 scoped_refptr<cc::Layer> readback_layer, 1283 scoped_refptr<cc::Layer> readback_layer,
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 // RenderWidgetHostView, public: 1385 // RenderWidgetHostView, public:
1504 1386
1505 // static 1387 // static
1506 RenderWidgetHostView* 1388 RenderWidgetHostView*
1507 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { 1389 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) {
1508 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); 1390 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
1509 return new RenderWidgetHostViewAndroid(rwhi, NULL); 1391 return new RenderWidgetHostViewAndroid(rwhi, NULL);
1510 } 1392 }
1511 1393
1512 } // namespace content 1394 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698