Home | History | Annotate | Download | only in test
      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   enum Colors {
     93     kCSSOrange = 0xffffa500,
     94     kCSSBrown = 0xffa52a2a,
     95     kCSSGreen = 0xff008000,
     96   };
     97 
     98   gfx::DisableNullDrawGLBindings enable_pixel_output_;
     99   scoped_ptr<PixelComparator> pixel_comparator_;
    100   PixelTestType test_type_;
    101   scoped_refptr<Layer> content_root_;
    102   Layer* readback_target_;
    103   base::FilePath ref_file_;
    104   scoped_ptr<SkBitmap> result_bitmap_;
    105   std::vector<scoped_refptr<TextureLayer> > texture_layers_;
    106   int pending_texture_mailbox_callbacks_;
    107   bool impl_side_painting_;
    108 };
    109 
    110 }  // namespace cc
    111 
    112 #endif  // CC_TEST_LAYER_TREE_PIXEL_TEST_H_
    113