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

Side by Side Diff: cc/surfaces/surface.cc

Issue 885443002: Roll Chrome into Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT mojo Created 5 years, 10 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
« no previous file with comments | « cc/surfaces/surface.h ('k') | cc/surfaces/surface_aggregator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/surfaces/surface.h" 5 #include "cc/surfaces/surface.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
10 #include "cc/output/copy_output_request.h" 10 #include "cc/output/copy_output_request.h"
(...skipping 16 matching lines...) Expand all
27 Surface::~Surface() { 27 Surface::~Surface() {
28 ClearCopyRequests(); 28 ClearCopyRequests();
29 if (current_frame_ && factory_) { 29 if (current_frame_ && factory_) {
30 ReturnedResourceArray current_resources; 30 ReturnedResourceArray current_resources;
31 TransferableResource::ReturnResources( 31 TransferableResource::ReturnResources(
32 current_frame_->delegated_frame_data->resource_list, 32 current_frame_->delegated_frame_data->resource_list,
33 &current_resources); 33 &current_resources);
34 factory_->UnrefResources(current_resources); 34 factory_->UnrefResources(current_resources);
35 } 35 }
36 if (!draw_callback_.is_null()) 36 if (!draw_callback_.is_null())
37 draw_callback_.Run(false); 37 draw_callback_.Run(SurfaceDrawStatus::DRAW_SKIPPED);
38 } 38 }
39 39
40 void Surface::QueueFrame(scoped_ptr<CompositorFrame> frame, 40 void Surface::QueueFrame(scoped_ptr<CompositorFrame> frame,
41 const DrawCallback& callback) { 41 const DrawCallback& callback) {
42 DCHECK(factory_); 42 DCHECK(factory_);
43 ClearCopyRequests(); 43 ClearCopyRequests();
44 TakeLatencyInfo(&frame->metadata.latency_info); 44 TakeLatencyInfo(&frame->metadata.latency_info);
45 scoped_ptr<CompositorFrame> previous_frame = current_frame_.Pass(); 45 scoped_ptr<CompositorFrame> previous_frame = current_frame_.Pass();
46 current_frame_ = frame.Pass(); 46 current_frame_ = frame.Pass();
47 factory_->ReceiveFromChild( 47 factory_->ReceiveFromChild(
48 current_frame_->delegated_frame_data->resource_list); 48 current_frame_->delegated_frame_data->resource_list);
49 ++frame_index_; 49 ++frame_index_;
50 50
51 if (previous_frame) { 51 if (previous_frame) {
52 ReturnedResourceArray previous_resources; 52 ReturnedResourceArray previous_resources;
53 TransferableResource::ReturnResources( 53 TransferableResource::ReturnResources(
54 previous_frame->delegated_frame_data->resource_list, 54 previous_frame->delegated_frame_data->resource_list,
55 &previous_resources); 55 &previous_resources);
56 factory_->UnrefResources(previous_resources); 56 factory_->UnrefResources(previous_resources);
57 } 57 }
58 if (!draw_callback_.is_null()) 58 if (!draw_callback_.is_null())
59 draw_callback_.Run(false); 59 draw_callback_.Run(SurfaceDrawStatus::DRAW_SKIPPED);
60 draw_callback_ = callback; 60 draw_callback_ = callback;
61 factory_->manager()->DidSatisfySequences( 61 factory_->manager()->DidSatisfySequences(
62 SurfaceIdAllocator::NamespaceForId(surface_id_), 62 SurfaceIdAllocator::NamespaceForId(surface_id_),
63 &current_frame_->metadata.satisfies_sequences); 63 &current_frame_->metadata.satisfies_sequences);
64 } 64 }
65 65
66 void Surface::RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> copy_request) { 66 void Surface::RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> copy_request) {
67 if (current_frame_ && 67 if (current_frame_ &&
68 !current_frame_->delegated_frame_data->render_pass_list.empty()) 68 !current_frame_->delegated_frame_data->render_pass_list.empty())
69 current_frame_->delegated_frame_data->render_pass_list.back() 69 current_frame_->delegated_frame_data->render_pass_list.back()
(...skipping 29 matching lines...) Expand all
99 if (latency_info->empty()) { 99 if (latency_info->empty()) {
100 current_frame_->metadata.latency_info.swap(*latency_info); 100 current_frame_->metadata.latency_info.swap(*latency_info);
101 return; 101 return;
102 } 102 }
103 std::copy(current_frame_->metadata.latency_info.begin(), 103 std::copy(current_frame_->metadata.latency_info.begin(),
104 current_frame_->metadata.latency_info.end(), 104 current_frame_->metadata.latency_info.end(),
105 std::back_inserter(*latency_info)); 105 std::back_inserter(*latency_info));
106 current_frame_->metadata.latency_info.clear(); 106 current_frame_->metadata.latency_info.clear();
107 } 107 }
108 108
109 void Surface::RunDrawCallbacks() { 109 void Surface::RunDrawCallbacks(SurfaceDrawStatus drawn) {
110 if (!draw_callback_.is_null()) { 110 if (!draw_callback_.is_null()) {
111 DrawCallback callback = draw_callback_; 111 DrawCallback callback = draw_callback_;
112 draw_callback_ = DrawCallback(); 112 draw_callback_ = DrawCallback();
113 callback.Run(true); 113 callback.Run(drawn);
114 } 114 }
115 } 115 }
116 116
117 void Surface::AddDestructionDependency(SurfaceSequence sequence) { 117 void Surface::AddDestructionDependency(SurfaceSequence sequence) {
118 destruction_dependencies_.push_back(sequence); 118 destruction_dependencies_.push_back(sequence);
119 } 119 }
120 120
121 void Surface::SatisfyDestructionDependencies( 121 void Surface::SatisfyDestructionDependencies(
122 base::hash_set<SurfaceSequence>* sequences) { 122 base::hash_set<SurfaceSequence>* sequences) {
123 destruction_dependencies_.erase( 123 destruction_dependencies_.erase(
124 std::remove_if( 124 std::remove_if(
125 destruction_dependencies_.begin(), destruction_dependencies_.end(), 125 destruction_dependencies_.begin(), destruction_dependencies_.end(),
126 [sequences](SurfaceSequence seq) { return !!sequences->erase(seq); }), 126 [sequences](SurfaceSequence seq) { return !!sequences->erase(seq); }),
127 destruction_dependencies_.end()); 127 destruction_dependencies_.end());
128 } 128 }
129 129
130 void Surface::ClearCopyRequests() { 130 void Surface::ClearCopyRequests() {
131 if (current_frame_) { 131 if (current_frame_) {
132 for (const auto& render_pass : 132 for (const auto& render_pass :
133 current_frame_->delegated_frame_data->render_pass_list) { 133 current_frame_->delegated_frame_data->render_pass_list) {
134 for (const auto& copy_request : render_pass->copy_requests) 134 for (const auto& copy_request : render_pass->copy_requests)
135 copy_request->SendEmptyResult(); 135 copy_request->SendEmptyResult();
136 } 136 }
137 } 137 }
138 } 138 }
139 139
140 } // namespace cc 140 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/surface.h ('k') | cc/surfaces/surface_aggregator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698