OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #if SK_SUPPORT_GPU | 9 #if SK_SUPPORT_GPU |
10 #include "GrContext.h" | 10 #include "GrContext.h" |
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 // Clear the recorded commands so that they do not accumulat
e. | 591 // Clear the recorded commands so that they do not accumulat
e. |
592 canvas.reset(recordTo.beginRecording(dim.fX, dim.fY, kRecord
Flags)); | 592 canvas.reset(recordTo.beginRecording(dim.fX, dim.fY, kRecord
Flags)); |
593 } | 593 } |
594 | 594 |
595 timer.start(); | 595 timer.start(); |
596 // Inner loop that allows us to break the run into smaller | 596 // Inner loop that allows us to break the run into smaller |
597 // chunks (e.g. frames). This is especially useful for the GPU | 597 // chunks (e.g. frames). This is especially useful for the GPU |
598 // as we can flush and/or swap buffers to keep the GPU from | 598 // as we can flush and/or swap buffers to keep the GPU from |
599 // queuing up too much work. | 599 // queuing up too much work. |
600 for (int loopCount = loopsPerIter; loopCount > 0; ) { | 600 for (int loopCount = loopsPerIter; loopCount > 0; ) { |
601 if (NULL != canvas) { | 601 // Save and restore around each call to draw() to guarantee
a pristine canvas. |
602 canvas->save(); | 602 SkAutoCanvasRestore saveRestore(canvas, true/*also save*/); |
603 } | 603 |
604 if (frameIntervalComputed && loopCount > loopsPerFrame) { | 604 if (frameIntervalComputed && loopCount > loopsPerFrame) { |
605 bench->setLoops(loopsPerFrame); | 605 bench->setLoops(loopsPerFrame); |
606 loopCount -= loopsPerFrame; | 606 loopCount -= loopsPerFrame; |
607 } else { | 607 } else { |
608 bench->setLoops(loopCount); | 608 bench->setLoops(loopCount); |
609 loopCount = 0; | 609 loopCount = 0; |
610 } | 610 } |
611 | 611 |
612 if (benchMode == kPictureRecord_BenchMode) { | 612 if (benchMode == kPictureRecord_BenchMode) { |
613 recordFrom.draw(canvas); | 613 recordFrom.draw(canvas); |
614 } else { | 614 } else { |
615 bench->draw(canvas); | 615 bench->draw(canvas); |
616 } | 616 } |
617 | 617 |
618 if (kDeferredSilent_BenchMode == benchMode) { | 618 if (kDeferredSilent_BenchMode == benchMode) { |
619 static_cast<SkDeferredCanvas*>(canvas.get())->silentFlus
h(); | 619 static_cast<SkDeferredCanvas*>(canvas.get())->silentFlus
h(); |
620 } else if (NULL != canvas) { | 620 } else if (NULL != canvas) { |
621 canvas->flush(); | 621 canvas->flush(); |
622 } | 622 } |
623 | 623 |
624 #if SK_SUPPORT_GPU | 624 #if SK_SUPPORT_GPU |
625 // swap drawing buffers on each frame to prevent the GPU | 625 // swap drawing buffers on each frame to prevent the GPU |
626 // from queuing up too much work | 626 // from queuing up too much work |
627 if (NULL != glContext) { | 627 if (NULL != glContext) { |
628 glContext->swapBuffers(); | 628 glContext->swapBuffers(); |
629 } | 629 } |
630 #endif | 630 #endif |
631 if (NULL != canvas) { | |
632 canvas->restore(); | |
633 } | |
634 } | 631 } |
635 | 632 |
636 | 633 |
637 | 634 |
638 // Stop truncated timers before GL calls complete, and stop the
full timers after. | 635 // Stop truncated timers before GL calls complete, and stop the
full timers after. |
639 timer.truncatedEnd(); | 636 timer.truncatedEnd(); |
640 #if SK_SUPPORT_GPU | 637 #if SK_SUPPORT_GPU |
641 if (NULL != glContext) { | 638 if (NULL != glContext) { |
642 context->flush(); | 639 context->flush(); |
643 SK_GL(*glContext, Finish()); | 640 SK_GL(*glContext, Finish()); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 gContextFactory.destroyContexts(); | 707 gContextFactory.destroyContexts(); |
711 #endif | 708 #endif |
712 return 0; | 709 return 0; |
713 } | 710 } |
714 | 711 |
715 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 712 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
716 int main(int argc, char * const argv[]) { | 713 int main(int argc, char * const argv[]) { |
717 return tool_main(argc, (char**) argv); | 714 return tool_main(argc, (char**) argv); |
718 } | 715 } |
719 #endif | 716 #endif |
OLD | NEW |