/* * Copyright (C) 2008-2009 Stephan Aßmus * All rights reserved. Distributed under the terms of the MIT license. */ #include "RandomLineTest.h" #include #include #include "TestSupport.h" RandomLineTest::RandomLineTest() : Test(), fTestDuration(0), fTestStart(-1), fLinesRendered(0), fLinesPerIteration(100), fIterations(0), fMaxIterations(1500), fViewBounds(0, 0, -1, -1) { } RandomLineTest::~RandomLineTest() { } void RandomLineTest::Prepare(BView* view) { fViewBounds = view->Bounds(); fTestDuration = 0; fLinesRendered = 0; fIterations = 0; fTestStart = system_time(); } bool RandomLineTest::RunIteration(BView* view) { bigtime_t now = system_time(); float vMiddle = (fViewBounds.top + fViewBounds.bottom) / 2; for (uint32 i = 0; i < fLinesPerIteration; i++) { view->SetHighColor(rand() % 255, rand() % 255, rand() % 255); BPoint a; a.x = random_number_between(fViewBounds.left, fViewBounds.right); a.y = random_number_between(fViewBounds.top, vMiddle); BPoint b; b.x = random_number_between(fViewBounds.left, fViewBounds.right); b.y = random_number_between(vMiddle, fViewBounds.bottom); view->StrokeLine(a, b); fLinesRendered++; } view->Sync(); fTestDuration += system_time() - now; fIterations++; return fIterations < fMaxIterations; } void RandomLineTest::PrintResults(BView* view) { if (fTestDuration == 0) { printf("Test was not run.\n"); return; } bigtime_t timeLeak = system_time() - fTestStart - fTestDuration; Test::PrintResults(view); printf("Lines per iteration: %lu\n", fLinesPerIteration); printf("Total lines rendered: %llu\n", fLinesRendered); printf("Lines per second: %.3f\n", fLinesRendered * 1000000.0 / fTestDuration); printf("Average time between iterations: %.4f seconds.\n", (float)timeLeak / fIterations / 1000000); } Test* RandomLineTest::CreateTest() { return new RandomLineTest(); }