skia2/tests/CanvasStateHelpers.h
Michael Ludwig 3021795041 Improve CanvasState cross-library tests
Several things are accomplished as part of this:
1. The canvas_state_lib build target is brought back so that we can
   actually test the canvas state sharing across library boundaries.
2. The canvas state helper functions are updated to work with DLLs
   (confirmed tests pass on Windows in cross library mode)
3. The tests now always run, and the cross-state define only changes
   what version of the helper functions are used
4. Updated the dlopen code in the test to use the SkOSLibrary ports
   instead of calling dlopen/dlclose directly.
5. Fix bugs in SkCanvasStateUtils that were uncovered as part of
   always running these tests.
6. Switches the define away from SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
   to SK_TEST_CANVAS_STATE_CROSS_LIBRARY, since these tests are not
   strictly speaking testing the unclipped layer feature.

Change-Id: Id4ae41e4bc3fb8227367deac899878ecf9d7b98e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/341003
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
2020-12-04 22:03:25 +00:00

64 lines
2.2 KiB
C++

/*
* Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef CanvasStateHelpers_DEFINED
#define CanvasStateHelpers_DEFINED
#include "include/core/SkTypes.h"
// See CanvasStateTest. These functions are either linked in to 'dm' directly (when this flag is
// not defined), or built in a shared library that is dlopened by the test. In that case, they
// should not be visible in 'dm', but the shared library will not have this flag set and compiles
// them as expected.
#if !defined(SK_TEST_CANVAS_STATE_CROSS_LIBRARY)
class SkCanvas;
class SkCanvasState;
class SkRegion;
#if defined(SK_BUILD_FOR_WIN)
#define EXPORT _declspec(dllexport)
#else
#define EXPORT
#endif
/*
* Helper function to perform drawing to an SkCanvas. Used by both
* test_complex_layers and complex_layers_draw_from_canvas_state.
*/
void complex_layers_draw(SkCanvas* canvas, float left, float top,
float right, float bottom, int32_t spacer);
/*
* Create an SkCanvas from state and draw to it. Return true on success.
*
* Used by test_complex_layers test in CanvasStateTest. Marked as extern
* so it can be called from a separate library.
*/
extern "C" bool EXPORT complex_layers_draw_from_canvas_state(SkCanvasState* state,
float left, float top, float right, float bottom, int32_t spacer);
/*
* Helper function to perform drawing to an SkCanvas. Used both by test_complex_clips
* and complex_clips_draw_from_canvas_state.
*/
void complex_clips_draw(SkCanvas* canvas, int32_t left, int32_t top,
int32_t right, int32_t bottom, int32_t clipOp, const SkRegion& localRegion);
/*
* Create an SkCanvas from state and draw to it. Return true on success.
*
* Used by test_complex_clips test in CanvasStateTest. Marked as extern
* so it can be called from a separate library.
*/
extern "C" bool EXPORT complex_clips_draw_from_canvas_state(SkCanvasState* state,
int32_t left, int32_t top, int32_t right, int32_t bottom, int32_t clipOp,
int32_t regionRects, int32_t* rectCoords);
#endif // SK_TEST_CANVAS_STATE_CROSS_LIBRARY
#endif // CanvasStateHelpers_DEFINED