| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | 2 // Use of this source code is governed by a BSD-style license that can be | 
|  | 3 // found in the LICENSE file. | 
|  | 4 | 
|  | 5 #include "cc/layers/delegated_frame_provider.h" | 
|  | 6 | 
|  | 7 #include "cc/layers/delegated_frame_resource_collection.h" | 
|  | 8 #include "cc/layers/delegated_renderer_layer.h" | 
|  | 9 #include "cc/output/delegated_frame_data.h" | 
|  | 10 #include "cc/quads/render_pass_draw_quad.h" | 
|  | 11 | 
|  | 12 namespace cc { | 
|  | 13 | 
|  | 14 DelegatedFrameProvider::DelegatedFrameProvider( | 
|  | 15     const scoped_refptr<DelegatedFrameResourceCollection>& resource_collection, | 
|  | 16     scoped_ptr<DelegatedFrameData> frame) | 
|  | 17     : resource_collection_(resource_collection), own_frame_resources_(false) { | 
|  | 18   RenderPass* root_pass = frame->render_pass_list.back(); | 
|  | 19   frame_size_ = root_pass->output_rect.size(); | 
|  | 20   DCHECK(!frame_size_.IsEmpty()); | 
|  | 21   SetFrameData(frame.Pass()); | 
|  | 22 } | 
|  | 23 | 
|  | 24 DelegatedFrameProvider::~DelegatedFrameProvider() {} | 
|  | 25 | 
|  | 26 void DelegatedFrameProvider::AddObserver(DelegatedRendererLayer* layer) { | 
|  | 27   if (DCHECK_IS_ON()) { | 
|  | 28     for (size_t i = 0; i < observers_.size(); ++i) | 
|  | 29       DCHECK(observers_[i].layer != layer); | 
|  | 30   } | 
|  | 31 | 
|  | 32   observers_.push_back(Observer(layer, gfx::RectF(frame_size_))); | 
|  | 33 | 
|  | 34   DCHECK(frame_) << "Must have a frame when given to a DelegatedRendererLayer."; | 
|  | 35 } | 
|  | 36 | 
|  | 37 void DelegatedFrameProvider::RemoveObserver(DelegatedRendererLayer* layer) { | 
|  | 38   bool found_observer = false; | 
|  | 39   for (size_t i = 0; i < observers_.size(); ++i) { | 
|  | 40     if (observers_[i].layer != layer) | 
|  | 41       continue; | 
|  | 42     observers_.erase(observers_.begin() + i); | 
|  | 43     found_observer = true; | 
|  | 44     break; | 
|  | 45   } | 
|  | 46   DCHECK(found_observer); | 
|  | 47 } | 
|  | 48 | 
|  | 49 void DelegatedFrameProvider::SetFrameData( | 
|  | 50     scoped_ptr<DelegatedFrameData> frame) { | 
|  | 51   DCHECK(frame); | 
|  | 52   DCHECK_NE(0u, frame->render_pass_list.size()); | 
|  | 53 | 
|  | 54   if (own_frame_resources_) { | 
|  | 55     ReturnedResourceArray unused; | 
|  | 56     TransferableResource::ReturnResources(frame_->resource_list, &unused); | 
|  | 57     resource_collection_->ReturnResources(unused); | 
|  | 58   } | 
|  | 59 | 
|  | 60   frame_ = frame.Pass(); | 
|  | 61   own_frame_resources_ = true; | 
|  | 62 | 
|  | 63   RenderPass* root_pass = frame_->render_pass_list.back(); | 
|  | 64   DCHECK_EQ(frame_size_.ToString(), root_pass->output_rect.size().ToString()) | 
|  | 65       << "All frames in a single DelegatedFrameProvider must have the same " | 
|  | 66       << "size. Use a new frame provider for frames of a different size."; | 
|  | 67 | 
|  | 68   for (size_t i = 0; i < observers_.size(); ++i) { | 
|  | 69     observers_[i].damage = | 
|  | 70         gfx::UnionRects(observers_[i].damage, root_pass->damage_rect); | 
|  | 71     observers_[i].layer->ProviderHasNewFrame(); | 
|  | 72   } | 
|  | 73 } | 
|  | 74 | 
|  | 75 DelegatedFrameData* DelegatedFrameProvider::GetFrameDataAndRefResources( | 
|  | 76     DelegatedRendererLayer* observer, | 
|  | 77     gfx::RectF* damage) { | 
|  | 78 | 
|  | 79   bool found_observer = false; | 
|  | 80   for (size_t i = 0; i < observers_.size(); ++i) { | 
|  | 81     if (observers_[i].layer != observer) | 
|  | 82       continue; | 
|  | 83     *damage = observers_[i].damage; | 
|  | 84     // The observer is now responsible for the damage. | 
|  | 85     observers_[i].damage = gfx::RectF(); | 
|  | 86     found_observer = true; | 
|  | 87   } | 
|  | 88   DCHECK(found_observer); | 
|  | 89 | 
|  | 90   if (own_frame_resources_) { | 
|  | 91     resource_collection_->ReceivedResources(frame_->resource_list); | 
|  | 92     own_frame_resources_ = false; | 
|  | 93   } | 
|  | 94 | 
|  | 95   resource_collection_->RefResources(frame_->resource_list); | 
|  | 96   return frame_.get(); | 
|  | 97 } | 
|  | 98 | 
|  | 99 ReturnCallback | 
|  | 100 DelegatedFrameProvider::GetReturnResourcesCallbackForImplThread() { | 
|  | 101   return resource_collection_->GetReturnResourcesCallbackForImplThread(); | 
|  | 102 } | 
|  | 103 | 
|  | 104 }  // namespace cc | 
| OLD | NEW | 
|---|