1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot* Copyright 2014 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
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if SK_SUPPORT_GPU
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrRectanizer_pow2.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrRectanizer_skyline.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h"
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSize.h"
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTDArray.h"
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Test.h"
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic const int kWidth = 1024;
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic const int kHeight = 1024;
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// Basic test of a GrRectanizer-derived class' functionality
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_rectanizer_basic(skiatest::Reporter* reporter, GrRectanizer* rectanizer) {
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, kWidth == rectanizer->width());
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, kHeight == rectanizer->height());
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkIPoint16 loc;
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, rectanizer->addRect(50, 50, &loc));
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, rectanizer->percentFull() > 0.0f);
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    rectanizer->reset();
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    REPORTER_ASSERT(reporter, rectanizer->percentFull() == 0.0f);
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_rectanizer_inserts(skiatest::Reporter*,
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                    GrRectanizer* rectanizer,
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                    const SkTDArray<SkISize>& rects) {
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int i;
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (i = 0; i < rects.count(); ++i) {
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkIPoint16 loc;
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        if (!rectanizer->addRect(rects[i].fWidth, rects[i].fHeight, &loc)) {
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            break;
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    //SkDebugf("\n***%d %f\n", i, rectanizer->percentFull());
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_skyline(skiatest::Reporter* reporter, const SkTDArray<SkISize>& rects) {
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrRectanizerSkyline skylineRectanizer(kWidth, kHeight);
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_rectanizer_basic(reporter, &skylineRectanizer);
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_rectanizer_inserts(reporter, &skylineRectanizer, rects);
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_pow2(skiatest::Reporter* reporter, const SkTDArray<SkISize>& rects) {
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    GrRectanizerPow2 pow2Rectanizer(kWidth, kHeight);
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_rectanizer_basic(reporter, &pow2Rectanizer);
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_rectanizer_inserts(reporter, &pow2Rectanizer, rects);
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_GPUTEST(GpuRectanizer, reporter, factory) {
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkTDArray<SkISize> rects;
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkRandom rand;
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (int i = 0; i < 50; i++) {
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        rects.push(SkISize::Make(rand.nextRangeU(1, kWidth / 2),
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                 rand.nextRangeU(1, kHeight / 2)));
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_skyline(reporter, rects);
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    test_pow2(reporter, rects);
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
75