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

Side by Side Diff: content/common/gpu/gpu_memory_manager.cc

Issue 53633003: Do not give GPU memory to backgrounded compositors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove test Created 7 years, 1 month 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/common/gpu/gpu_memory_manager.h ('k') | content/common/gpu/gpu_memory_manager_client.h » ('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 (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/common/gpu/gpu_memory_manager.h" 5 #include "content/common/gpu/gpu_memory_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 uint64 max_surfaces_with_frontbuffer_soft_limit) 52 uint64 max_surfaces_with_frontbuffer_soft_limit)
53 : channel_manager_(channel_manager), 53 : channel_manager_(channel_manager),
54 manage_immediate_scheduled_(false), 54 manage_immediate_scheduled_(false),
55 max_surfaces_with_frontbuffer_soft_limit_( 55 max_surfaces_with_frontbuffer_soft_limit_(
56 max_surfaces_with_frontbuffer_soft_limit), 56 max_surfaces_with_frontbuffer_soft_limit),
57 bytes_available_gpu_memory_(0), 57 bytes_available_gpu_memory_(0),
58 bytes_available_gpu_memory_overridden_(false), 58 bytes_available_gpu_memory_overridden_(false),
59 bytes_minimum_per_client_(0), 59 bytes_minimum_per_client_(0),
60 bytes_default_per_client_(0), 60 bytes_default_per_client_(0),
61 bytes_allocated_managed_current_(0), 61 bytes_allocated_managed_current_(0),
62 bytes_allocated_managed_visible_(0),
63 bytes_allocated_managed_nonvisible_(0),
64 bytes_allocated_unmanaged_current_(0), 62 bytes_allocated_unmanaged_current_(0),
65 bytes_allocated_historical_max_(0), 63 bytes_allocated_historical_max_(0),
66 bytes_allocated_unmanaged_high_(0), 64 bytes_allocated_unmanaged_high_(0),
67 bytes_allocated_unmanaged_low_(0), 65 bytes_allocated_unmanaged_low_(0),
68 bytes_unmanaged_limit_step_(kBytesAllocatedUnmanagedStep), 66 bytes_unmanaged_limit_step_(kBytesAllocatedUnmanagedStep),
69 disable_schedule_manage_(false) 67 disable_schedule_manage_(false)
70 { 68 {
71 CommandLine* command_line = CommandLine::ForCurrentProcess(); 69 CommandLine* command_line = CommandLine::ForCurrentProcess();
72 70
73 #if defined(OS_ANDROID) 71 #if defined(OS_ANDROID)
74 bytes_default_per_client_ = 8 * 1024 * 1024; 72 bytes_default_per_client_ = 8 * 1024 * 1024;
75 bytes_minimum_per_client_ = 8 * 1024 * 1024; 73 bytes_minimum_per_client_ = 8 * 1024 * 1024;
76 #elif defined(OS_CHROMEOS) 74 #elif defined(OS_CHROMEOS)
77 bytes_default_per_client_ = 64 * 1024 * 1024; 75 bytes_default_per_client_ = 64 * 1024 * 1024;
78 bytes_minimum_per_client_ = 4 * 1024 * 1024; 76 bytes_minimum_per_client_ = 4 * 1024 * 1024;
79 #else 77 #else
80 bytes_default_per_client_ = 64 * 1024 * 1024; 78 bytes_default_per_client_ = 64 * 1024 * 1024;
81 bytes_minimum_per_client_ = 64 * 1024 * 1024; 79 bytes_minimum_per_client_ = 64 * 1024 * 1024;
82 #endif 80 #endif
83 81
84 // On Android, always discard everything that is nonvisible.
85 // On Linux and Mac, use as little memory as possible to avoid stability
86 // issues.
87 // http://crbug.com/145600 (Linux)
88 // http://crbug.com/141377 (Mac)
89 #if defined(OS_ANDROID) || defined(OS_MACOSX) || \
90 (defined(OS_LINUX) && !defined(OS_CHROMEOS))
91 allow_nonvisible_memory_ = false;
92 #else
93 allow_nonvisible_memory_ = true;
94 #endif
95
96 if (command_line->HasSwitch(switches::kForceGpuMemAvailableMb)) { 82 if (command_line->HasSwitch(switches::kForceGpuMemAvailableMb)) {
97 base::StringToUint64( 83 base::StringToUint64(
98 command_line->GetSwitchValueASCII(switches::kForceGpuMemAvailableMb), 84 command_line->GetSwitchValueASCII(switches::kForceGpuMemAvailableMb),
99 &bytes_available_gpu_memory_); 85 &bytes_available_gpu_memory_);
100 bytes_available_gpu_memory_ *= 1024 * 1024; 86 bytes_available_gpu_memory_ *= 1024 * 1024;
101 bytes_available_gpu_memory_overridden_ = true; 87 bytes_available_gpu_memory_overridden_ = true;
102 } else 88 } else
103 bytes_available_gpu_memory_ = GetDefaultAvailableGpuMemory(); 89 bytes_available_gpu_memory_ = GetDefaultAvailableGpuMemory();
104 } 90 }
105 91
106 GpuMemoryManager::~GpuMemoryManager() { 92 GpuMemoryManager::~GpuMemoryManager() {
107 DCHECK(tracking_groups_.empty()); 93 DCHECK(tracking_groups_.empty());
108 DCHECK(clients_visible_mru_.empty()); 94 DCHECK(clients_visible_mru_.empty());
109 DCHECK(clients_nonvisible_mru_.empty()); 95 DCHECK(clients_nonvisible_mru_.empty());
110 DCHECK(clients_nonsurface_.empty()); 96 DCHECK(clients_nonsurface_.empty());
111 DCHECK(!bytes_allocated_managed_current_); 97 DCHECK(!bytes_allocated_managed_current_);
112 DCHECK(!bytes_allocated_unmanaged_current_); 98 DCHECK(!bytes_allocated_unmanaged_current_);
113 DCHECK(!bytes_allocated_managed_visible_);
114 DCHECK(!bytes_allocated_managed_nonvisible_);
115 } 99 }
116 100
117 uint64 GpuMemoryManager::GetAvailableGpuMemory() const { 101 uint64 GpuMemoryManager::GetAvailableGpuMemory() const {
118 // Allow unmanaged allocations to over-subscribe by at most (high_ - low_) 102 // Allow unmanaged allocations to over-subscribe by at most (high_ - low_)
119 // before restricting managed (compositor) memory based on unmanaged usage. 103 // before restricting managed (compositor) memory based on unmanaged usage.
120 if (bytes_allocated_unmanaged_low_ > bytes_available_gpu_memory_) 104 if (bytes_allocated_unmanaged_low_ > bytes_available_gpu_memory_)
121 return 0; 105 return 0;
122 return bytes_available_gpu_memory_ - bytes_allocated_unmanaged_low_; 106 return bytes_available_gpu_memory_ - bytes_allocated_unmanaged_low_;
123 } 107 }
124 108
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 GpuMemoryManagerClient* client, 275 GpuMemoryManagerClient* client,
292 bool has_surface, 276 bool has_surface,
293 bool visible) { 277 bool visible) {
294 TrackingGroupMap::iterator tracking_group_it = 278 TrackingGroupMap::iterator tracking_group_it =
295 tracking_groups_.find(client->GetMemoryTracker()); 279 tracking_groups_.find(client->GetMemoryTracker());
296 DCHECK(tracking_group_it != tracking_groups_.end()); 280 DCHECK(tracking_group_it != tracking_groups_.end());
297 GpuMemoryTrackingGroup* tracking_group = tracking_group_it->second; 281 GpuMemoryTrackingGroup* tracking_group = tracking_group_it->second;
298 282
299 GpuMemoryManagerClientState* client_state = new GpuMemoryManagerClientState( 283 GpuMemoryManagerClientState* client_state = new GpuMemoryManagerClientState(
300 this, client, tracking_group, has_surface, visible); 284 this, client, tracking_group, has_surface, visible);
301 TrackValueChanged(0, client_state->managed_memory_stats_.bytes_allocated,
302 client_state->visible_ ?
303 &bytes_allocated_managed_visible_ :
304 &bytes_allocated_managed_nonvisible_);
305 AddClientToList(client_state); 285 AddClientToList(client_state);
306 ScheduleManage(kScheduleManageNow); 286 ScheduleManage(kScheduleManageNow);
307 return client_state; 287 return client_state;
308 } 288 }
309 289
310 void GpuMemoryManager::OnDestroyClientState( 290 void GpuMemoryManager::OnDestroyClientState(
311 GpuMemoryManagerClientState* client_state) { 291 GpuMemoryManagerClientState* client_state) {
312 RemoveClientFromList(client_state); 292 RemoveClientFromList(client_state);
313 TrackValueChanged(client_state->managed_memory_stats_.bytes_allocated, 0,
314 client_state->visible_ ?
315 &bytes_allocated_managed_visible_ :
316 &bytes_allocated_managed_nonvisible_);
317 ScheduleManage(kScheduleManageLater); 293 ScheduleManage(kScheduleManageLater);
318 } 294 }
319 295
320 void GpuMemoryManager::SetClientStateVisible( 296 void GpuMemoryManager::SetClientStateVisible(
321 GpuMemoryManagerClientState* client_state, bool visible) { 297 GpuMemoryManagerClientState* client_state, bool visible) {
322 DCHECK(client_state->has_surface_); 298 DCHECK(client_state->has_surface_);
323 if (client_state->visible_ == visible) 299 if (client_state->visible_ == visible)
324 return; 300 return;
325 301
326 RemoveClientFromList(client_state); 302 RemoveClientFromList(client_state);
327 client_state->visible_ = visible; 303 client_state->visible_ = visible;
328 AddClientToList(client_state); 304 AddClientToList(client_state);
329
330 TrackValueChanged(client_state->managed_memory_stats_.bytes_allocated, 0,
331 client_state->visible_ ?
332 &bytes_allocated_managed_nonvisible_ :
333 &bytes_allocated_managed_visible_);
334 TrackValueChanged(0, client_state->managed_memory_stats_.bytes_allocated,
335 client_state->visible_ ?
336 &bytes_allocated_managed_visible_ :
337 &bytes_allocated_managed_nonvisible_);
338 ScheduleManage(visible ? kScheduleManageNow : kScheduleManageLater); 305 ScheduleManage(visible ? kScheduleManageNow : kScheduleManageLater);
339 } 306 }
340 307
341 void GpuMemoryManager::SetClientStateManagedMemoryStats( 308 void GpuMemoryManager::SetClientStateManagedMemoryStats(
342 GpuMemoryManagerClientState* client_state, 309 GpuMemoryManagerClientState* client_state,
343 const ManagedMemoryStats& stats) 310 const ManagedMemoryStats& stats)
344 { 311 {
345 TrackValueChanged(client_state->managed_memory_stats_.bytes_allocated,
346 stats.bytes_allocated,
347 client_state->visible_ ?
348 &bytes_allocated_managed_visible_ :
349 &bytes_allocated_managed_nonvisible_);
350 client_state->managed_memory_stats_ = stats; 312 client_state->managed_memory_stats_ = stats;
351 313
352 // If this is the first time that stats have been received for this 314 // If this is the first time that stats have been received for this
353 // client, use them immediately. 315 // client, use them immediately.
354 if (!client_state->managed_memory_stats_received_) { 316 if (!client_state->managed_memory_stats_received_) {
355 client_state->managed_memory_stats_received_ = true; 317 client_state->managed_memory_stats_received_ = true;
356 ScheduleManage(kScheduleManageNow); 318 ScheduleManage(kScheduleManageNow);
357 return; 319 return;
358 } 320 }
359 321
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 uint64 allocation = GetMinimumClientAllocation(); 456 uint64 allocation = GetMinimumClientAllocation();
495 allocation += std::min(bytes_required - GetMinimumClientAllocation(), 457 allocation += std::min(bytes_required - GetMinimumClientAllocation(),
496 bytes_above_minimum_cap); 458 bytes_above_minimum_cap);
497 allocation += std::min(bytes_nicetohave - bytes_required, 459 allocation += std::min(bytes_nicetohave - bytes_required,
498 bytes_above_required_cap); 460 bytes_above_required_cap);
499 allocation = std::min(allocation, 461 allocation = std::min(allocation,
500 bytes_overall_cap); 462 bytes_overall_cap);
501 return allocation; 463 return allocation;
502 } 464 }
503 465
504 uint64 GpuMemoryManager::ComputeClientAllocationWhenNonvisible(
505 GpuMemoryManagerClientState* client_state) {
506 if (!client_state->managed_memory_stats_received_)
507 return 0;
508
509 if (!allow_nonvisible_memory_)
510 return 0;
511
512 return 9 * client_state->managed_memory_stats_.bytes_required / 8;
513 }
514
515 void GpuMemoryManager::ComputeVisibleSurfacesAllocations() { 466 void GpuMemoryManager::ComputeVisibleSurfacesAllocations() {
516 uint64 bytes_available_total = GetAvailableGpuMemory(); 467 uint64 bytes_available_total = GetAvailableGpuMemory();
517 uint64 bytes_above_required_cap = std::numeric_limits<uint64>::max(); 468 uint64 bytes_above_required_cap = std::numeric_limits<uint64>::max();
518 uint64 bytes_above_minimum_cap = std::numeric_limits<uint64>::max(); 469 uint64 bytes_above_minimum_cap = std::numeric_limits<uint64>::max();
519 uint64 bytes_overall_cap_visible = GetMaximumClientAllocation(); 470 uint64 bytes_overall_cap_visible = GetMaximumClientAllocation();
520 471
521 // Compute memory usage at three levels 472 // Compute memory usage at three levels
522 // - painting everything that is nicetohave for visible clients 473 // - painting everything that is nicetohave for visible clients
523 // - painting only what that is visible 474 // - painting only what that is visible
524 // - giving every client the minimum allocation 475 // - giving every client the minimum allocation
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 bytes_above_required_cap, 554 bytes_above_required_cap,
604 bytes_above_minimum_cap, 555 bytes_above_minimum_cap,
605 bytes_overall_cap_visible); 556 bytes_overall_cap_visible);
606 bytes_allocated_visible += client_state->bytes_allocation_when_visible_; 557 bytes_allocated_visible += client_state->bytes_allocation_when_visible_;
607 bytes_allocated_max_client_allocation = std::max( 558 bytes_allocated_max_client_allocation = std::max(
608 bytes_allocated_max_client_allocation, 559 bytes_allocated_max_client_allocation,
609 client_state->bytes_allocation_when_visible_); 560 client_state->bytes_allocation_when_visible_);
610 } 561 }
611 562
612 // Set the limit for nonvisible clients for when they become visible. 563 // Set the limit for nonvisible clients for when they become visible.
613 // Use the same formula, with a lowered overall cap to in case any of the 564 // Use the same formula, with a lowered overall cap in case any of the
614 // currently-nonvisible clients are much more resource-intensive than any 565 // currently-nonvisible clients are much more resource-intensive than any
615 // of the existing clients. 566 // of the existing clients.
616 uint64 bytes_overall_cap_nonvisible = bytes_allocated_max_client_allocation; 567 uint64 bytes_overall_cap_nonvisible = bytes_allocated_max_client_allocation;
617 if (bytes_available_total > bytes_allocated_visible) { 568 if (bytes_available_total > bytes_allocated_visible) {
618 bytes_overall_cap_nonvisible += 569 bytes_overall_cap_nonvisible +=
619 bytes_available_total - bytes_allocated_visible; 570 bytes_available_total - bytes_allocated_visible;
620 } 571 }
621 bytes_overall_cap_nonvisible = std::min(bytes_overall_cap_nonvisible, 572 bytes_overall_cap_nonvisible = std::min(bytes_overall_cap_nonvisible,
622 GetMaximumClientAllocation()); 573 GetMaximumClientAllocation());
623 for (ClientStateList::const_iterator it = clients_nonvisible_mru_.begin(); 574 for (ClientStateList::const_iterator it = clients_nonvisible_mru_.begin();
624 it != clients_nonvisible_mru_.end(); 575 it != clients_nonvisible_mru_.end();
625 ++it) { 576 ++it) {
626 GpuMemoryManagerClientState* client_state = *it; 577 GpuMemoryManagerClientState* client_state = *it;
627 client_state->bytes_allocation_when_visible_ = 578 client_state->bytes_allocation_when_visible_ =
628 ComputeClientAllocationWhenVisible( 579 ComputeClientAllocationWhenVisible(
629 client_state, 580 client_state,
630 bytes_above_required_cap, 581 bytes_above_required_cap,
631 bytes_above_minimum_cap, 582 bytes_above_minimum_cap,
632 bytes_overall_cap_nonvisible); 583 bytes_overall_cap_nonvisible);
633 } 584 }
634 } 585 }
635 586
636 void GpuMemoryManager::ComputeNonvisibleSurfacesAllocations() {
637 uint64 bytes_allocated_visible = 0;
638 for (ClientStateList::const_iterator it = clients_visible_mru_.begin();
639 it != clients_visible_mru_.end();
640 ++it) {
641 GpuMemoryManagerClientState* client_state = *it;
642 bytes_allocated_visible += client_state->bytes_allocation_when_visible_;
643 }
644
645 // Allow up to 1/4 of the memory that was available for visible clients to
646 // go to nonvisible clients.
647 uint64 bytes_available_total = GetAvailableGpuMemory();
648 uint64 bytes_available_nonvisible = 0;
649 uint64 bytes_allocated_nonvisible = 0;
650 if (bytes_available_total > bytes_allocated_visible) {
651 bytes_available_nonvisible = std::min(
652 bytes_available_total / 4,
653 bytes_available_total - bytes_allocated_visible);
654 }
655
656 // Determine which now-visible clients should keep their contents when
657 // they are made nonvisible.
658 for (ClientStateList::const_iterator it = clients_visible_mru_.begin();
659 it != clients_visible_mru_.end();
660 ++it) {
661 GpuMemoryManagerClientState* client_state = *it;
662
663 // Compute the amount of space available have for this renderer when it is
664 // nonvisible. Do not count this client's allocation while visible against
665 // the nonvisible clients' allocation total.
666 uint64 bytes_available_nonvisible_adjusted = std::min(
667 bytes_available_nonvisible +
668 client_state->bytes_allocation_when_visible_ / 4,
669 bytes_available_total / 4);
670
671 // Allow this client to keep its contents if they fit in the allocation.
672 client_state->bytes_allocation_when_nonvisible_ =
673 ComputeClientAllocationWhenNonvisible(client_state);
674 if (client_state->bytes_allocation_when_nonvisible_ >
675 bytes_available_nonvisible_adjusted)
676 client_state->bytes_allocation_when_nonvisible_ = 0;
677 }
678
679 // Compute which currently nonvisible clients should keep their contents.
680 for (ClientStateList::const_iterator it = clients_nonvisible_mru_.begin();
681 it != clients_nonvisible_mru_.end();
682 ++it) {
683 GpuMemoryManagerClientState* client_state = *it;
684
685 // If this client is nonvisible and has already had its contents discarded,
686 // don't re-generate the contents until the client becomes visible again.
687 if (!client_state->bytes_allocation_when_nonvisible_)
688 continue;
689
690 client_state->bytes_allocation_when_nonvisible_ =
691 ComputeClientAllocationWhenNonvisible(client_state);
692
693 // Take into account all more recently used nonvisible clients, and only if
694 // this client still fits, all it to keep its contents.
695 if (bytes_allocated_nonvisible +
696 client_state->bytes_allocation_when_nonvisible_ >
697 bytes_available_nonvisible) {
698 client_state->bytes_allocation_when_nonvisible_ = 0;
699 }
700 bytes_allocated_nonvisible +=
701 client_state->bytes_allocation_when_nonvisible_;
702 }
703 }
704
705 void GpuMemoryManager::DistributeRemainingMemoryToVisibleSurfaces() { 587 void GpuMemoryManager::DistributeRemainingMemoryToVisibleSurfaces() {
706 uint64 bytes_available_total = GetAvailableGpuMemory(); 588 uint64 bytes_available_total = GetAvailableGpuMemory();
707 uint64 bytes_allocated_total = 0; 589 uint64 bytes_allocated_total = 0;
708 590
709 for (ClientStateList::const_iterator it = clients_visible_mru_.begin(); 591 for (ClientStateList::const_iterator it = clients_visible_mru_.begin();
710 it != clients_visible_mru_.end(); 592 it != clients_visible_mru_.end();
711 ++it) { 593 ++it) {
712 GpuMemoryManagerClientState* client_state = *it; 594 GpuMemoryManagerClientState* client_state = *it;
713 bytes_allocated_total += client_state->bytes_allocation_when_visible_; 595 bytes_allocated_total += client_state->bytes_allocation_when_visible_;
714 } 596 }
715 for (ClientStateList::const_iterator it = clients_nonvisible_mru_.begin();
716 it != clients_nonvisible_mru_.end();
717 ++it) {
718 GpuMemoryManagerClientState* client_state = *it;
719 bytes_allocated_total += client_state->bytes_allocation_when_nonvisible_;
720 }
721 597
722 if (bytes_allocated_total >= bytes_available_total) 598 if (bytes_allocated_total >= bytes_available_total)
723 return; 599 return;
724 600
725 std::vector<uint64> bytes_extra_requests; 601 std::vector<uint64> bytes_extra_requests;
726 for (ClientStateList::const_iterator it = clients_visible_mru_.begin(); 602 for (ClientStateList::const_iterator it = clients_visible_mru_.begin();
727 it != clients_visible_mru_.end(); 603 it != clients_visible_mru_.end();
728 ++it) { 604 ++it) {
729 GpuMemoryManagerClientState* client_state = *it; 605 GpuMemoryManagerClientState* client_state = *it;
730 CHECK(GetMaximumClientAllocation() >= 606 CHECK(GetMaximumClientAllocation() >=
(...skipping 11 matching lines...) Expand all
742 uint64 bytes_extra = GetMaximumClientAllocation() - 618 uint64 bytes_extra = GetMaximumClientAllocation() -
743 client_state->bytes_allocation_when_visible_; 619 client_state->bytes_allocation_when_visible_;
744 client_state->bytes_allocation_when_visible_ += std::min( 620 client_state->bytes_allocation_when_visible_ += std::min(
745 bytes_extra, bytes_extra_cap); 621 bytes_extra, bytes_extra_cap);
746 } 622 }
747 } 623 }
748 624
749 void GpuMemoryManager::AssignSurfacesAllocations() { 625 void GpuMemoryManager::AssignSurfacesAllocations() {
750 // Compute allocation when for all clients. 626 // Compute allocation when for all clients.
751 ComputeVisibleSurfacesAllocations(); 627 ComputeVisibleSurfacesAllocations();
752 ComputeNonvisibleSurfacesAllocations();
753 628
754 // Distribute the remaining memory to visible clients. 629 // Distribute the remaining memory to visible clients.
755 DistributeRemainingMemoryToVisibleSurfaces(); 630 DistributeRemainingMemoryToVisibleSurfaces();
756 631
757 // Send that allocation to the clients. 632 // Send that allocation to the clients.
758 ClientStateList clients = clients_visible_mru_; 633 ClientStateList clients = clients_visible_mru_;
759 clients.insert(clients.end(), 634 clients.insert(clients.end(),
760 clients_nonvisible_mru_.begin(), 635 clients_nonvisible_mru_.begin(),
761 clients_nonvisible_mru_.end()); 636 clients_nonvisible_mru_.end());
762 for (ClientStateList::const_iterator it = clients.begin(); 637 for (ClientStateList::const_iterator it = clients.begin();
(...skipping 17 matching lines...) Expand all
780 // because the platform is unstable when under memory pressure. 655 // because the platform is unstable when under memory pressure.
781 // http://crbug.com/145600 (Linux) 656 // http://crbug.com/145600 (Linux)
782 // http://crbug.com/141377 (Mac) 657 // http://crbug.com/141377 (Mac)
783 allocation.priority_cutoff_when_visible = 658 allocation.priority_cutoff_when_visible =
784 #if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) 659 #if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
785 MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE; 660 MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE;
786 #else 661 #else
787 MemoryAllocation::CUTOFF_ALLOW_EVERYTHING; 662 MemoryAllocation::CUTOFF_ALLOW_EVERYTHING;
788 #endif 663 #endif
789 664
790 allocation.bytes_limit_when_not_visible =
791 client_state->bytes_allocation_when_nonvisible_;
792 allocation.priority_cutoff_when_not_visible =
793 MemoryAllocation::CUTOFF_ALLOW_REQUIRED_ONLY;
794
795 client_state->client_->SetMemoryAllocation(allocation); 665 client_state->client_->SetMemoryAllocation(allocation);
796 client_state->client_->SuggestHaveFrontBuffer(!client_state->hibernated_); 666 client_state->client_->SuggestHaveFrontBuffer(!client_state->hibernated_);
797 } 667 }
798 } 668 }
799 669
800 void GpuMemoryManager::AssignNonSurfacesAllocations() { 670 void GpuMemoryManager::AssignNonSurfacesAllocations() {
801 for (ClientStateList::const_iterator it = clients_nonsurface_.begin(); 671 for (ClientStateList::const_iterator it = clients_nonsurface_.begin();
802 it != clients_nonsurface_.end(); 672 it != clients_nonsurface_.end();
803 ++it) { 673 ++it) {
804 GpuMemoryManagerClientState* client_state = *it; 674 GpuMemoryManagerClientState* client_state = *it;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 763
894 void GpuMemoryManager::RemoveClientFromList( 764 void GpuMemoryManager::RemoveClientFromList(
895 GpuMemoryManagerClientState* client_state) { 765 GpuMemoryManagerClientState* client_state) {
896 DCHECK(client_state->list_iterator_valid_); 766 DCHECK(client_state->list_iterator_valid_);
897 ClientStateList* client_list = GetClientList(client_state); 767 ClientStateList* client_list = GetClientList(client_state);
898 client_list->erase(client_state->list_iterator_); 768 client_list->erase(client_state->list_iterator_);
899 client_state->list_iterator_valid_ = false; 769 client_state->list_iterator_valid_ = false;
900 } 770 }
901 771
902 } // namespace content 772 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/gpu_memory_manager.h ('k') | content/common/gpu/gpu_memory_manager_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698