1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2013 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkDiscardableMemoryPool.h"
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Test.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(DiscardableMemoryPool, reporter) {
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    sk_sp<SkDiscardableMemoryPool> pool(SkDiscardableMemoryPool::Make(1));
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    pool->setRAMBudget(3);
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<SkDiscardableMemory> dm1(pool->create(100));
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, dm1->data() != nullptr);
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, 100 == pool->getRAMUsed());
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    dm1->unlock();
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, !dm1->lock());
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    std::unique_ptr<SkDiscardableMemory> dm2(pool->create(200));
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, 200 == pool->getRAMUsed());
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    pool->setRAMBudget(400);
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    dm2->unlock();
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, 200 == pool->getRAMUsed());
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, dm2->lock());
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    dm2->unlock();
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    pool->dumpPool();
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, !dm2->lock());
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, 0 == pool->getRAMUsed());
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
35