OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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 "cc/layers/layer.h" | 5 #include "cc/layers/layer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
| 9 #include "base/location.h" |
9 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| 11 #include "base/single_thread_task_runner.h" |
10 #include "cc/animation/animation.h" | 12 #include "cc/animation/animation.h" |
11 #include "cc/animation/animation_events.h" | 13 #include "cc/animation/animation_events.h" |
12 #include "cc/animation/layer_animation_controller.h" | 14 #include "cc/animation/layer_animation_controller.h" |
13 #include "cc/base/thread.h" | |
14 #include "cc/layers/layer_impl.h" | 15 #include "cc/layers/layer_impl.h" |
15 #include "cc/output/copy_output_request.h" | 16 #include "cc/output/copy_output_request.h" |
16 #include "cc/output/copy_output_result.h" | 17 #include "cc/output/copy_output_result.h" |
17 #include "cc/trees/layer_tree_host.h" | 18 #include "cc/trees/layer_tree_host.h" |
18 #include "cc/trees/layer_tree_impl.h" | 19 #include "cc/trees/layer_tree_impl.h" |
19 #include "third_party/WebKit/public/platform/WebAnimationDelegate.h" | 20 #include "third_party/WebKit/public/platform/WebAnimationDelegate.h" |
20 #include "third_party/WebKit/public/platform/WebLayerScrollClient.h" | 21 #include "third_party/WebKit/public/platform/WebLayerScrollClient.h" |
21 #include "third_party/skia/include/core/SkImageFilter.h" | 22 #include "third_party/skia/include/core/SkImageFilter.h" |
22 #include "ui/gfx/rect_conversions.h" | 23 #include "ui/gfx/rect_conversions.h" |
23 | 24 |
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 return; | 651 return; |
651 position_constraint_ = constraint; | 652 position_constraint_ = constraint; |
652 SetNeedsCommit(); | 653 SetNeedsCommit(); |
653 } | 654 } |
654 | 655 |
655 static void RunCopyCallbackOnMainThread(scoped_ptr<CopyOutputRequest> request, | 656 static void RunCopyCallbackOnMainThread(scoped_ptr<CopyOutputRequest> request, |
656 scoped_ptr<CopyOutputResult> result) { | 657 scoped_ptr<CopyOutputResult> result) { |
657 request->SendResult(result.Pass()); | 658 request->SendResult(result.Pass()); |
658 } | 659 } |
659 | 660 |
660 static void PostCopyCallbackToMainThread(Thread* main_thread, | 661 static void PostCopyCallbackToMainThread( |
661 scoped_ptr<CopyOutputRequest> request, | 662 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner, |
662 scoped_ptr<CopyOutputResult> result) { | 663 scoped_ptr<CopyOutputRequest> request, |
663 main_thread->PostTask(base::Bind(&RunCopyCallbackOnMainThread, | 664 scoped_ptr<CopyOutputResult> result) { |
664 base::Passed(&request), | 665 main_thread_task_runner->PostTask(FROM_HERE, |
665 base::Passed(&result))); | 666 base::Bind(&RunCopyCallbackOnMainThread, |
| 667 base::Passed(&request), |
| 668 base::Passed(&result))); |
666 } | 669 } |
667 | 670 |
668 void Layer::PushPropertiesTo(LayerImpl* layer) { | 671 void Layer::PushPropertiesTo(LayerImpl* layer) { |
669 layer->SetAnchorPoint(anchor_point_); | 672 layer->SetAnchorPoint(anchor_point_); |
670 layer->SetAnchorPointZ(anchor_point_z_); | 673 layer->SetAnchorPointZ(anchor_point_z_); |
671 layer->SetBackgroundColor(background_color_); | 674 layer->SetBackgroundColor(background_color_); |
672 layer->SetBounds(paint_properties_.bounds); | 675 layer->SetBounds(paint_properties_.bounds); |
673 layer->SetContentBounds(content_bounds()); | 676 layer->SetContentBounds(content_bounds()); |
674 layer->SetContentsScale(contents_scale_x(), contents_scale_y()); | 677 layer->SetContentsScale(contents_scale_x(), contents_scale_y()); |
675 layer->SetDebugName(debug_name_); | 678 layer->SetDebugName(debug_name_); |
(...skipping 29 matching lines...) Expand all Loading... |
705 | 708 |
706 layer->SetScrollable(scrollable_); | 709 layer->SetScrollable(scrollable_); |
707 layer->SetScrollOffset(scroll_offset_); | 710 layer->SetScrollOffset(scroll_offset_); |
708 layer->SetMaxScrollOffset(max_scroll_offset_); | 711 layer->SetMaxScrollOffset(max_scroll_offset_); |
709 | 712 |
710 // Wrap the copy_requests_ in a PostTask to the main thread. | 713 // Wrap the copy_requests_ in a PostTask to the main thread. |
711 ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests; | 714 ScopedPtrVector<CopyOutputRequest> main_thread_copy_requests; |
712 for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin(); | 715 for (ScopedPtrVector<CopyOutputRequest>::iterator it = copy_requests_.begin(); |
713 it != copy_requests_.end(); | 716 it != copy_requests_.end(); |
714 ++it) { | 717 ++it) { |
| 718 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner = |
| 719 layer_tree_host()->proxy()->MainThreadTaskRunner(); |
715 scoped_ptr<CopyOutputRequest> original_request = copy_requests_.take(it); | 720 scoped_ptr<CopyOutputRequest> original_request = copy_requests_.take(it); |
716 const CopyOutputRequest& original_request_ref = *original_request; | 721 const CopyOutputRequest& original_request_ref = *original_request; |
717 scoped_ptr<CopyOutputRequest> main_thread_request = | 722 scoped_ptr<CopyOutputRequest> main_thread_request = |
718 CopyOutputRequest::CreateRelayRequest( | 723 CopyOutputRequest::CreateRelayRequest( |
719 original_request_ref, | 724 original_request_ref, |
720 base::Bind(&PostCopyCallbackToMainThread, | 725 base::Bind(&PostCopyCallbackToMainThread, |
721 layer_tree_host()->proxy()->MainThread(), | 726 main_thread_task_runner, |
722 base::Passed(&original_request))); | 727 base::Passed(&original_request))); |
723 main_thread_copy_requests.push_back(main_thread_request.Pass()); | 728 main_thread_copy_requests.push_back(main_thread_request.Pass()); |
724 } | 729 } |
725 copy_requests_.clear(); | 730 copy_requests_.clear(); |
726 layer->PassCopyRequests(&main_thread_copy_requests); | 731 layer->PassCopyRequests(&main_thread_copy_requests); |
727 | 732 |
728 // If the main thread commits multiple times before the impl thread actually | 733 // If the main thread commits multiple times before the impl thread actually |
729 // draws, then damage tracking will become incorrect if we simply clobber the | 734 // draws, then damage tracking will become incorrect if we simply clobber the |
730 // update_rect here. The LayerImpl's update_rect needs to accumulate (i.e. | 735 // update_rect here. The LayerImpl's update_rect needs to accumulate (i.e. |
731 // union) any update changes that have occurred on the main thread. | 736 // union) any update changes that have occurred on the main thread. |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
882 | 887 |
883 RenderingStatsInstrumentation* Layer::rendering_stats_instrumentation() const { | 888 RenderingStatsInstrumentation* Layer::rendering_stats_instrumentation() const { |
884 return layer_tree_host_->rendering_stats_instrumentation(); | 889 return layer_tree_host_->rendering_stats_instrumentation(); |
885 } | 890 } |
886 | 891 |
887 bool Layer::SupportsLCDText() const { | 892 bool Layer::SupportsLCDText() const { |
888 return false; | 893 return false; |
889 } | 894 } |
890 | 895 |
891 } // namespace cc | 896 } // namespace cc |
OLD | NEW |