12c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com/*
22c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com * Copyright 2013 Google Inc.
32c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com *
42c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com * Use of this source code is governed by a BSD-style license that can be
52c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com * found in the LICENSE file.
62c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com */
72c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "SkDiscardableMemoryPool.h"
82c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com
92c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com#include "Test.h"
102c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com
112c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.comDEF_TEST(DiscardableMemoryPool, reporter) {
122c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    SkAutoTUnref<SkDiscardableMemoryPool> pool(
13cf2f00872c559c892bb4b466bf678c7667490ccecommit-bot@chromium.org        SkDiscardableMemoryPool::Create(1, NULL));
142c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    pool->setRAMBudget(3);
152c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
162c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com
172c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    SkAutoTDelete<SkDiscardableMemory> dm1(pool->create(100));
182c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, dm1->data() != NULL);
192c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, 100 == pool->getRAMUsed());
202c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    dm1->unlock();
212c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
222c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, !dm1->lock());
232c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com
242c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com
252c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    SkAutoTDelete<SkDiscardableMemory> dm2(pool->create(200));
262c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, 200 == pool->getRAMUsed());
272c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    pool->setRAMBudget(400);
282c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    dm2->unlock();
292c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, 200 == pool->getRAMUsed());
302c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, dm2->lock());
312c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    dm2->unlock();
322c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    pool->dumpPool();
332c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, !dm2->lock());
342c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com    REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
352c7c7ee47d75e7815ea8db05e924ab55958cb402halcanary@google.com}
36