#include "android_webview/browser/global_tile_manager_client.h"
#include "base/lazy_instance.h"
+using content::SynchronousCompositorMemoryPolicy;
+
namespace android_webview {
namespace {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
DCHECK(mru_list_.end() != key);
- total_allocated_tiles_ -= (*key)->GetNumTiles();
+ total_allocated_tiles_ -= (*key)->GetMemoryPolicy().num_resources_limit;
mru_list_.erase(key);
DCHECK(IsConsistent());
}
if (*it == *key)
break;
- size_t evicted_tiles = (*it)->GetNumTiles();
- (*it)->SetNumTiles(0, true);
+ size_t evicted_tiles = (*it)->GetMemoryPolicy().num_resources_limit;
+ SynchronousCompositorMemoryPolicy zero_policy;
+ (*it)->SetMemoryPolicy(zero_policy, true);
total_evicted_tiles += evicted_tiles;
if (total_evicted_tiles >= desired_num_tiles)
num_tiles_limit_ = num_tiles_limit;
}
-void GlobalTileManager::RequestTiles(size_t new_num_of_tiles, Key key) {
+void GlobalTileManager::RequestTiles(
+ SynchronousCompositorMemoryPolicy new_policy,
+ Key key) {
DCHECK(IsConsistent());
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
- size_t old_num_of_tiles = (*key)->GetNumTiles();
+ size_t new_num_of_tiles = new_policy.num_resources_limit;
+ size_t old_num_of_tiles = (*key)->GetMemoryPolicy().num_resources_limit;
size_t num_of_active_views = std::distance(mru_list_.begin(), key) + 1;
size_t tiles_per_view_limit;
if (num_of_active_views == 0)
// Has enough tiles to satisfy the request.
if (new_total_allocated_tiles <= num_tiles_limit_) {
total_allocated_tiles_ = new_total_allocated_tiles;
- (*key)->SetNumTiles(new_num_of_tiles, false);
+ new_policy.num_resources_limit = new_num_of_tiles;
+ (*key)->SetMemoryPolicy(new_policy, false);
return;
}
if (evicted_tiles >= new_total_allocated_tiles - num_tiles_limit_) {
new_total_allocated_tiles -= evicted_tiles;
total_allocated_tiles_ = new_total_allocated_tiles;
- (*key)->SetNumTiles(new_num_of_tiles, false);
+ new_policy.num_resources_limit = new_num_of_tiles;
+ (*key)->SetMemoryPolicy(new_policy, false);
return;
} else {
total_allocated_tiles_ = num_tiles_limit_;
- (*key)->SetNumTiles(tiles_left + old_num_of_tiles + evicted_tiles, false);
+ new_policy.num_resources_limit =
+ tiles_left + old_num_of_tiles + evicted_tiles;
+ (*key)->SetMemoryPolicy(new_policy, false);
return;
}
}
size_t total_tiles = 0;
ListType::const_iterator it;
for (it = mru_list_.begin(); it != mru_list_.end(); it++) {
- total_tiles += (*it)->GetNumTiles();
+ total_tiles += (*it)->GetMemoryPolicy().num_resources_limit;
}
bool is_consistent = (total_tiles <= num_tiles_limit_ &&