1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_TEST_LAYER_TREE_PIXEL_TEST_H_ 6 #define CC_TEST_LAYER_TREE_PIXEL_TEST_H_ 7 8 #include <vector> 9 10 #include "base/files/file_path.h" 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "cc/resources/single_release_callback.h" 14 #include "cc/test/layer_tree_test.h" 15 #include "ui/gl/gl_implementation.h" 16 17 class SkBitmap; 18 19 namespace gpu { 20 class GLInProcessContext; 21 } 22 23 namespace cc { 24 class CopyOutputRequest; 25 class CopyOutputResult; 26 class LayerTreeHost; 27 class PixelComparator; 28 class SolidColorLayer; 29 class TextureLayer; 30 class TextureMailbox; 31 32 class LayerTreePixelTest : public LayerTreeTest { 33 protected: 34 LayerTreePixelTest(); 35 virtual ~LayerTreePixelTest(); 36 37 virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) OVERRIDE; 38 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE; 39 40 virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest(); 41 42 void ReadbackResult(scoped_ptr<CopyOutputResult> result); 43 44 virtual void BeginTest() OVERRIDE; 45 virtual void SetupTree() OVERRIDE; 46 virtual void AfterTest() OVERRIDE; 47 virtual void EndTest() OVERRIDE; 48 49 void TryEndTest(); 50 51 scoped_refptr<SolidColorLayer> CreateSolidColorLayer(const gfx::Rect& rect, 52 SkColor color); 53 scoped_refptr<SolidColorLayer> CreateSolidColorLayerWithBorder( 54 const gfx::Rect& rect, 55 SkColor color, 56 int border_width, 57 SkColor border_color); 58 scoped_refptr<TextureLayer> CreateTextureLayer(const gfx::Rect& rect, 59 const SkBitmap& bitmap); 60 61 enum PixelTestType { 62 GL_WITH_DEFAULT, 63 GL_WITH_BITMAP, 64 SOFTWARE_WITH_DEFAULT, 65 SOFTWARE_WITH_BITMAP 66 }; 67 68 void RunPixelTest(PixelTestType type, 69 scoped_refptr<Layer> content_root, 70 base::FilePath file_name); 71 72 void RunPixelTestWithReadbackTarget(PixelTestType type, 73 scoped_refptr<Layer> content_root, 74 Layer* target, 75 base::FilePath file_name); 76 77 scoped_ptr<SkBitmap> CopyTextureMailboxToBitmap( 78 const gfx::Size& size, 79 const TextureMailbox& texture_mailbox); 80 81 void CopyBitmapToTextureMailboxAsTexture( 82 const SkBitmap& bitmap, 83 TextureMailbox* texture_mailbox, 84 scoped_ptr<SingleReleaseCallback>* release_callback); 85 86 void ReleaseTextureMailbox(scoped_ptr<gpu::GLInProcessContext> context, 87 uint32 texture, 88 uint32 sync_point, 89 bool lost_resource); 90 91 // Common CSS colors defined for tests to use. 92 static const SkColor kCSSOrange = 0xffffa500; 93 static const SkColor kCSSBrown = 0xffa52a2a; 94 static const SkColor kCSSGreen = 0xff008000; 95 96 gfx::DisableNullDrawGLBindings enable_pixel_output_; 97 scoped_ptr<PixelComparator> pixel_comparator_; 98 PixelTestType test_type_; 99 scoped_refptr<Layer> content_root_; 100 Layer* readback_target_; 101 base::FilePath ref_file_; 102 scoped_ptr<SkBitmap> result_bitmap_; 103 std::vector<scoped_refptr<TextureLayer> > texture_layers_; 104 int pending_texture_mailbox_callbacks_; 105 bool impl_side_painting_; 106 }; 107 108 } // namespace cc 109 110 #endif // CC_TEST_LAYER_TREE_PIXEL_TEST_H_ 111