#include "cc/resources/prioritized_resource_manager.h"
#include "cc/resources/resource.h"
+#include "cc/resources/resource_provider.h"
#include "cc/test/fake_output_surface.h"
#include "cc/test/fake_output_surface_client.h"
#include "cc/test/fake_proxy.h"
+#include "cc/test/test_shared_bitmap_manager.h"
#include "cc/test/tiled_layer_test_common.h"
#include "cc/trees/single_thread_proxy.h" // For DebugScopedSetImplThread
#include "testing/gtest/include/gtest/gtest.h"
output_surface_(FakeOutputSurface::Create3d()) {
DebugScopedSetImplThread impl_thread(&proxy_);
CHECK(output_surface_->BindToClient(&output_surface_client_));
- resource_provider_ =
- ResourceProvider::Create(output_surface_.get(), NULL, 0, false, 1);
+ shared_bitmap_manager_.reset(new TestSharedBitmapManager());
+ resource_provider_ = ResourceProvider::Create(
+ output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1,
+ false);
}
virtual ~PrioritizedResourceTest() {
impl_thread_and_main_thread_blocked(&proxy_);
bool success = texture->can_acquire_backing_texture();
if (success)
- texture->AcquireBackingTexture(ResourceProvider());
+ texture->AcquireBackingTexture(resource_provider());
return success;
}
resource_manager->PushTexturePrioritiesToBackings();
}
- cc::ResourceProvider* ResourceProvider() { return resource_provider_.get(); }
+ ResourceProvider* resource_provider() { return resource_provider_.get(); }
void ResourceManagerAssertInvariants(
PrioritizedResourceManager* resource_manager) {
-#ifndef NDEBUG
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
resource_manager->AssertInvariants();
-#endif
}
bool TextureBackingIsAbovePriorityCutoff(PrioritizedResource* texture) {
const gfx::Size texture_size_;
const ResourceFormat texture_format_;
FakeOutputSurfaceClient output_surface_client_;
- scoped_ptr<cc::OutputSurface> output_surface_;
- scoped_ptr<cc::ResourceProvider> resource_provider_;
+ scoped_ptr<OutputSurface> output_surface_;
+ scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
+ scoped_ptr<ResourceProvider> resource_provider_;
};
namespace {
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ChangeMemoryLimits) {
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(8), resource_manager->MemoryAboveCutoffBytes());
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(5), resource_manager->MemoryAboveCutoffBytes());
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(4), resource_manager->MemoryAboveCutoffBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ReduceWastedMemory) {
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
// 20 textures have backings allocated.
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->UpdateBackingsState(ResourceProvider());
- resource_manager->ReduceWastedMemory(ResourceProvider());
+ resource_manager->UpdateBackingsState(resource_provider());
+ resource_manager->ReduceWastedMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(20), resource_manager->MemoryUseBytes());
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->UpdateBackingsState(ResourceProvider());
- resource_manager->ReduceWastedMemory(ResourceProvider());
+ resource_manager->UpdateBackingsState(resource_provider());
+ resource_manager->ReduceWastedMemory(resource_provider());
}
EXPECT_GT(TexturesMemorySize(20), resource_manager->MemoryUseBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, InUseNotWastedMemory) {
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
// 20 textures have backings allocated.
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->UpdateBackingsState(ResourceProvider());
- resource_manager->ReduceWastedMemory(ResourceProvider());
+ resource_manager->UpdateBackingsState(resource_provider());
+ resource_manager->ReduceWastedMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(20), resource_manager->MemoryUseBytes());
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->UpdateBackingsState(ResourceProvider());
- resource_manager->ReduceWastedMemory(ResourceProvider());
+ resource_manager->UpdateBackingsState(resource_provider());
+ resource_manager->ReduceWastedMemory(resource_provider());
}
EXPECT_GT(TexturesMemorySize(20), resource_manager->MemoryUseBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ChangePriorityCutoff) {
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(6), resource_manager->MemoryAboveCutoffBytes());
EXPECT_LE(resource_manager->MemoryUseBytes(),
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(4), resource_manager->MemoryAboveCutoffBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
resource_manager->ReduceMemoryOnImplThread(
- TexturesMemorySize(8), 104, ResourceProvider());
+ TexturesMemorySize(8), 104, resource_provider());
EXPECT_EQ(0u, EvictedBackingCount(resource_manager.get()));
resource_manager->ReduceMemoryOnImplThread(
- TexturesMemorySize(8), 103, ResourceProvider());
+ TexturesMemorySize(8), 103, resource_provider());
EXPECT_EQ(1u, EvictedBackingCount(resource_manager.get()));
}
resource_manager->UnlinkAndClearEvictedBackings();
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(4), resource_manager->MemoryAboveCutoffBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
-TEST_F(PrioritizedResourceTest, NotEvictingTexturesInParent) {
+TEST_F(PrioritizedResourceTest, EvictingTexturesInParent) {
const size_t kMaxTextures = 8;
scoped_ptr<PrioritizedResourceManager> resource_manager =
CreateManager(kMaxTextures);
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(8), resource_manager->MemoryAboveCutoffBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
resource_manager->ReduceMemoryOnImplThread(
- TexturesMemorySize(4), 200, ResourceProvider());
+ TexturesMemorySize(4), 200, resource_provider());
EXPECT_EQ(4u, EvictedBackingCount(resource_manager.get()));
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ReduceMemory(ResourceProvider());
+ resource_manager->ReduceMemory(resource_provider());
}
EXPECT_EQ(TexturesMemorySize(8), resource_manager->MemoryAboveCutoffBytes());
to_send.push_back(textures[i]->resource_id());
resource_provider_->PrepareSendToParent(to_send, &transferable);
+ // Set the last two textures to be tied for prioity with the two
+ // before them. Being sent to the parent will break the tie.
+ textures[4]->set_request_priority(100 + 4);
+ textures[5]->set_request_priority(100 + 5);
+ textures[6]->set_request_priority(100 + 4);
+ textures[7]->set_request_priority(100 + 5);
+
for (size_t i = 0; i < 8; ++i)
texture_resource_ids[i] = textures[i]->resource_id();
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->UpdateBackingsState(ResourceProvider());
+ resource_manager->UpdateBackingsState(resource_provider());
}
// Evict four textures. It would be the last four again, except that 2 of them
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
resource_manager->ReduceMemoryOnImplThread(
- TexturesMemorySize(4), 200, ResourceProvider());
+ TexturesMemorySize(4), 200, resource_provider());
EXPECT_EQ(4u, EvictedBackingCount(resource_manager.get()));
// The last 2 backings remain this time.
std::vector<unsigned> remaining = BackingResources(resource_manager.get());
EXPECT_TRUE(std::find(remaining.begin(),
remaining.end(),
- texture_resource_ids[6]) != remaining.end());
+ texture_resource_ids[6]) == remaining.end());
EXPECT_TRUE(std::find(remaining.begin(),
remaining.end(),
- texture_resource_ids[7]) != remaining.end());
+ texture_resource_ids[7]) == remaining.end());
}
resource_manager->UnlinkAndClearEvictedBackings();
EXPECT_EQ(TexturesMemorySize(4), resource_manager->MemoryUseBytes());
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ResourceManagerPartialUpdateTextures) {
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ResourceManagerPrioritiesAreEqual) {
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ResourceManagerDestroyedFirst) {
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
resource_manager.reset();
{
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager_one->ClearAllMemory(ResourceProvider());
+ resource_manager_one->ClearAllMemory(resource_provider());
}
resource_manager_one.reset();
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager_two->ClearAllMemory(ResourceProvider());
+ resource_manager_two->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest,
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest,
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest,
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, RequestLateBackingsSorting) {
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
TEST_F(PrioritizedResourceTest, ClearUploadsToEvictedResources) {
resource_manager->ReduceMemoryOnImplThread(
TexturesMemorySize(1),
PriorityCalculator::AllowEverythingCutoff(),
- ResourceProvider());
+ resource_provider());
queue.ClearUploadsToEvictedResources();
EXPECT_EQ(1u, queue.FullUploadSize());
resource_manager->ReduceMemoryOnImplThread(
- 0, PriorityCalculator::AllowEverythingCutoff(), ResourceProvider());
+ 0, PriorityCalculator::AllowEverythingCutoff(), resource_provider());
queue.ClearUploadsToEvictedResources();
EXPECT_EQ(0u, queue.FullUploadSize());
}
DebugScopedSetImplThreadAndMainThreadBlocked
impl_thread_and_main_thread_blocked(&proxy_);
- resource_manager->ClearAllMemory(ResourceProvider());
+ resource_manager->ClearAllMemory(resource_provider());
}
} // namespace