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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 1194623003: cc: Remove contents_texture_manager from LayerTreeHost(Impl) and proxy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: contentstexturemanager: rebase Created 5 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 recycle_tree_ = nullptr; 282 recycle_tree_ = nullptr;
283 pending_tree_ = nullptr; 283 pending_tree_ = nullptr;
284 active_tree_ = nullptr; 284 active_tree_ = nullptr;
285 DestroyTileManager(); 285 DestroyTileManager();
286 } 286 }
287 287
288 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) { 288 void LayerTreeHostImpl::BeginMainFrameAborted(CommitEarlyOutReason reason) {
289 // If the begin frame data was handled, then scroll and scale set was applied 289 // If the begin frame data was handled, then scroll and scale set was applied
290 // by the main thread, so the active tree needs to be updated as if these sent 290 // by the main thread, so the active tree needs to be updated as if these sent
291 // values were applied and committed. 291 // values were applied and committed.
292 if (CommitEarlyOutHandledCommit(reason)) { 292 if (CommitEarlyOutHandledCommit(reason))
293 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit(); 293 active_tree_->ApplySentScrollAndScaleDeltasFromAbortedCommit();
294 active_tree_->ResetContentsTexturesPurged();
295 }
296 } 294 }
297 295
298 void LayerTreeHostImpl::BeginCommit() { 296 void LayerTreeHostImpl::BeginCommit() {
299 TRACE_EVENT0("cc", "LayerTreeHostImpl::BeginCommit"); 297 TRACE_EVENT0("cc", "LayerTreeHostImpl::BeginCommit");
300 298
301 // Ensure all textures are returned so partial texture updates can happen 299 // Ensure all textures are returned so partial texture updates can happen
302 // during the commit. 300 // during the commit.
303 // TODO(ericrk): We should not need to ForceReclaimResources when using 301 // TODO(ericrk): We should not need to ForceReclaimResources when using
304 // Impl-side-painting as it doesn't upload during commits. However, 302 // Impl-side-painting as it doesn't upload during commits. However,
305 // Display::Draw currently relies on resource being reclaimed to block drawing 303 // Display::Draw currently relies on resource being reclaimed to block drawing
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw empty viewport", 377 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::CanDraw empty viewport",
380 TRACE_EVENT_SCOPE_THREAD); 378 TRACE_EVENT_SCOPE_THREAD);
381 return false; 379 return false;
382 } 380 }
383 if (active_tree_->ViewportSizeInvalid()) { 381 if (active_tree_->ViewportSizeInvalid()) {
384 TRACE_EVENT_INSTANT0( 382 TRACE_EVENT_INSTANT0(
385 "cc", "LayerTreeHostImpl::CanDraw viewport size recently changed", 383 "cc", "LayerTreeHostImpl::CanDraw viewport size recently changed",
386 TRACE_EVENT_SCOPE_THREAD); 384 TRACE_EVENT_SCOPE_THREAD);
387 return false; 385 return false;
388 } 386 }
389 if (active_tree_->ContentsTexturesPurged()) {
390 TRACE_EVENT_INSTANT0(
391 "cc", "LayerTreeHostImpl::CanDraw contents textures purged",
392 TRACE_EVENT_SCOPE_THREAD);
393 return false;
394 }
395 if (EvictedUIResourcesExist()) { 387 if (EvictedUIResourcesExist()) {
396 TRACE_EVENT_INSTANT0( 388 TRACE_EVENT_INSTANT0(
397 "cc", "LayerTreeHostImpl::CanDraw UI resources evicted not recreated", 389 "cc", "LayerTreeHostImpl::CanDraw UI resources evicted not recreated",
398 TRACE_EVENT_SCOPE_THREAD); 390 TRACE_EVENT_SCOPE_THREAD);
399 return false; 391 return false;
400 } 392 }
401 return true; 393 return true;
402 } 394 }
403 395
404 void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time) { 396 void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time) {
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 pass_references[quad->render_pass_id]--; 1134 pass_references[quad->render_pass_id]--;
1143 } 1135 }
1144 1136
1145 frame->render_passes_by_id.erase(pass->id); 1137 frame->render_passes_by_id.erase(pass->id);
1146 frame->render_passes.erase(frame->render_passes.end() - 2 - i); 1138 frame->render_passes.erase(frame->render_passes.end() - 2 - i);
1147 --i; 1139 --i;
1148 } 1140 }
1149 } 1141 }
1150 1142
1151 void LayerTreeHostImpl::EvictTexturesForTesting() { 1143 void LayerTreeHostImpl::EvictTexturesForTesting() {
1152 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); 1144 UpdateTileManagerMemoryPolicy(ManagedMemoryPolicy(0));
1153 } 1145 }
1154 1146
1155 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { 1147 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) {
1156 NOTREACHED(); 1148 NOTREACHED();
1157 } 1149 }
1158 1150
1159 void LayerTreeHostImpl::ResetTreesForTesting() { 1151 void LayerTreeHostImpl::ResetTreesForTesting() {
1160 if (active_tree_) 1152 if (active_tree_)
1161 active_tree_->DetachLayerTree(); 1153 active_tree_->DetachLayerTree();
1162 active_tree_ = 1154 active_tree_ =
1163 LayerTreeImpl::create(this, active_tree()->page_scale_factor(), 1155 LayerTreeImpl::create(this, active_tree()->page_scale_factor(),
1164 active_tree()->top_controls_shown_ratio(), 1156 active_tree()->top_controls_shown_ratio(),
1165 active_tree()->elastic_overscroll()); 1157 active_tree()->elastic_overscroll());
1166 if (pending_tree_) 1158 if (pending_tree_)
1167 pending_tree_->DetachLayerTree(); 1159 pending_tree_->DetachLayerTree();
1168 pending_tree_ = nullptr; 1160 pending_tree_ = nullptr;
1169 if (recycle_tree_) 1161 if (recycle_tree_)
1170 recycle_tree_->DetachLayerTree(); 1162 recycle_tree_->DetachLayerTree();
1171 recycle_tree_ = nullptr; 1163 recycle_tree_ = nullptr;
1172 } 1164 }
1173 1165
1174 size_t LayerTreeHostImpl::SourceAnimationFrameNumberForTesting() const { 1166 size_t LayerTreeHostImpl::SourceAnimationFrameNumberForTesting() const {
1175 return fps_counter_->current_frame_number(); 1167 return fps_counter_->current_frame_number();
1176 } 1168 }
1177 1169
1178 void LayerTreeHostImpl::EnforceManagedMemoryPolicy(
1179 const ManagedMemoryPolicy& policy) {
1180
1181 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread(
1182 visible_ ? policy.bytes_limit_when_visible : 0,
1183 ManagedMemoryPolicy::PriorityCutoffToValue(
1184 visible_ ? policy.priority_cutoff_when_visible
1185 : gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING));
1186 if (evicted_resources) {
1187 active_tree_->SetContentsTexturesPurged();
1188 if (pending_tree_)
1189 pending_tree_->SetContentsTexturesPurged();
1190 client_->SetNeedsCommitOnImplThread();
1191 client_->OnCanDrawStateChanged(CanDraw());
1192 client_->RenewTreePriority();
1193 }
1194
1195 UpdateTileManagerMemoryPolicy(policy);
1196 }
1197
1198 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( 1170 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy(
1199 const ManagedMemoryPolicy& policy) { 1171 const ManagedMemoryPolicy& policy) {
1200 if (!tile_manager_) 1172 if (!tile_manager_)
1201 return; 1173 return;
1202 1174
1203 global_tile_state_.hard_memory_limit_in_bytes = 0; 1175 global_tile_state_.hard_memory_limit_in_bytes = 0;
1204 global_tile_state_.soft_memory_limit_in_bytes = 0; 1176 global_tile_state_.soft_memory_limit_in_bytes = 0;
1205 if (visible_ && policy.bytes_limit_when_visible > 0) { 1177 if (visible_ && policy.bytes_limit_when_visible > 0) {
1206 global_tile_state_.hard_memory_limit_in_bytes = 1178 global_tile_state_.hard_memory_limit_in_bytes =
1207 policy.bytes_limit_when_visible; 1179 policy.bytes_limit_when_visible;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 cached_managed_memory_policy_ = policy; 1332 cached_managed_memory_policy_ = policy;
1361 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy(); 1333 ManagedMemoryPolicy actual_policy = ActualManagedMemoryPolicy();
1362 1334
1363 if (old_policy == actual_policy) 1335 if (old_policy == actual_policy)
1364 return; 1336 return;
1365 1337
1366 if (!proxy_->HasImplThread()) { 1338 if (!proxy_->HasImplThread()) {
1367 // In single-thread mode, this can be called on the main thread by 1339 // In single-thread mode, this can be called on the main thread by
1368 // GLRenderer::OnMemoryAllocationChanged. 1340 // GLRenderer::OnMemoryAllocationChanged.
1369 DebugScopedSetImplThread impl_thread(proxy_); 1341 DebugScopedSetImplThread impl_thread(proxy_);
1370 EnforceManagedMemoryPolicy(actual_policy); 1342 UpdateTileManagerMemoryPolicy(actual_policy);
1371 } else { 1343 } else {
1372 DCHECK(proxy_->IsImplThread()); 1344 DCHECK(proxy_->IsImplThread());
1373 EnforceManagedMemoryPolicy(actual_policy); 1345 UpdateTileManagerMemoryPolicy(actual_policy);
1374 } 1346 }
1375 1347
1376 // If there is already enough memory to draw everything imaginable and the 1348 // If there is already enough memory to draw everything imaginable and the
1377 // new memory limit does not change this, then do not re-commit. Don't bother 1349 // new memory limit does not change this, then do not re-commit. Don't bother
1378 // skipping commits if this is not visible (commits don't happen when not 1350 // skipping commits if this is not visible (commits don't happen when not
1379 // visible, there will almost always be a commit when this becomes visible). 1351 // visible, there will almost always be a commit when this becomes visible).
1380 bool needs_commit = true; 1352 bool needs_commit = true;
1381 if (visible() && 1353 if (visible() &&
1382 actual_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ && 1354 actual_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ &&
1383 old_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ && 1355 old_policy.bytes_limit_when_visible >= max_memory_needed_bytes_ &&
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1967 } 1939 }
1968 } 1940 }
1969 1941
1970 void LayerTreeHostImpl::SetVisible(bool visible) { 1942 void LayerTreeHostImpl::SetVisible(bool visible) {
1971 DCHECK(proxy_->IsImplThread()); 1943 DCHECK(proxy_->IsImplThread());
1972 1944
1973 if (visible_ == visible) 1945 if (visible_ == visible)
1974 return; 1946 return;
1975 visible_ = visible; 1947 visible_ = visible;
1976 DidVisibilityChange(this, visible_); 1948 DidVisibilityChange(this, visible_);
1977 EnforceManagedMemoryPolicy(ActualManagedMemoryPolicy()); 1949 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
1978 1950
1979 // If we just became visible, we have to ensure that we draw high res tiles, 1951 // If we just became visible, we have to ensure that we draw high res tiles,
1980 // to prevent checkerboard/low res flashes. 1952 // to prevent checkerboard/low res flashes.
1981 if (visible_) 1953 if (visible_)
1982 SetRequiresHighResToDraw(); 1954 SetRequiresHighResToDraw();
1983 else 1955 else
1984 EvictAllUIResources(); 1956 EvictAllUIResources();
1985 1957
1986 // Call PrepareTiles unconditionally on visibility change since this tab may 1958 // Call PrepareTiles unconditionally on visibility change since this tab may
1987 // never get another draw or timer tick. When becoming visible we care about 1959 // never get another draw or timer tick. When becoming visible we care about
(...skipping 1502 matching lines...) Expand 10 before | Expand all | Expand 10 after
3490 new_target.SetToMin(layer_impl->MaxScrollOffset()); 3462 new_target.SetToMin(layer_impl->MaxScrollOffset());
3491 3463
3492 curve->UpdateTarget( 3464 curve->UpdateTarget(
3493 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time) 3465 animation->TrimTimeToCurrentIteration(CurrentBeginFrameArgs().frame_time)
3494 .InSecondsF(), 3466 .InSecondsF(),
3495 new_target); 3467 new_target);
3496 3468
3497 return true; 3469 return true;
3498 } 3470 }
3499 } // namespace cc 3471 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698