12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef CC_TEST_LAYER_TREE_PIXEL_TEST_H_
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CC_TEST_LAYER_TREE_PIXEL_TEST_H_
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include <vector>
9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "cc/resources/single_release_callback.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/layer_tree_test.h"
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gl/gl_implementation.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class SkBitmap;
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace gpu {
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GLInProcessContext;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CopyOutputRequest;
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class CopyOutputResult;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHost;
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PixelComparator;
28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass SolidColorLayer;
29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass TextureLayer;
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class TextureMailbox;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreePixelTest : public LayerTreeTest {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerTreePixelTest();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~LayerTreePixelTest();
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) OVERRIDE;
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE;
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual scoped_ptr<CopyOutputRequest> CreateCopyOutputRequest();
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void ReadbackResult(scoped_ptr<CopyOutputResult> result);
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void BeginTest() OVERRIDE;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetupTree() OVERRIDE;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void AfterTest() OVERRIDE;
47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual void EndTest() OVERRIDE;
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  void TryEndTest();
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<SolidColorLayer> CreateSolidColorLayer(const gfx::Rect& rect,
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                       SkColor color);
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_refptr<SolidColorLayer> CreateSolidColorLayerWithBorder(
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Rect& rect,
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkColor color,
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      int border_width,
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkColor border_color);
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<TextureLayer> CreateTextureLayer(const gfx::Rect& rect,
59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                                                 const SkBitmap& bitmap);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  enum PixelTestType {
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    GL_WITH_DEFAULT,
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    GL_WITH_BITMAP,
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    SOFTWARE_WITH_DEFAULT,
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    SOFTWARE_WITH_BITMAP
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  };
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void RunPixelTest(PixelTestType type,
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                    scoped_refptr<Layer> content_root,
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    base::FilePath file_name);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void RunPixelTestWithReadbackTarget(PixelTestType type,
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                      scoped_refptr<Layer> content_root,
74b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                      Layer* target,
75b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                                      base::FilePath file_name);
76b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_ptr<SkBitmap> CopyTextureMailboxToBitmap(
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const gfx::Size& size,
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      const TextureMailbox& texture_mailbox);
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  void CopyBitmapToTextureMailboxAsTexture(
82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      const SkBitmap& bitmap,
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      TextureMailbox* texture_mailbox,
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      scoped_ptr<SingleReleaseCallback>* release_callback);
85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void ReleaseTextureMailbox(scoped_ptr<gpu::GLInProcessContext> context,
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             uint32 texture,
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             uint32 sync_point,
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                             bool lost_resource);
90558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Common CSS colors defined for tests to use.
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum Colors {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    kCSSOrange = 0xffffa500,
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    kCSSBrown = 0xffa52a2a,
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    kCSSGreen = 0xff008000,
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  gfx::DisableNullDrawGLBindings enable_pixel_output_;
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<PixelComparator> pixel_comparator_;
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  PixelTestType test_type_;
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<Layer> content_root_;
102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  Layer* readback_target_;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath ref_file_;
1047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_ptr<SkBitmap> result_bitmap_;
105558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  std::vector<scoped_refptr<TextureLayer> > texture_layers_;
106558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  int pending_texture_mailbox_callbacks_;
1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool impl_side_painting_;
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CC_TEST_LAYER_TREE_PIXEL_TEST_H_
113