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