mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2025-12-26 07:40:10 +01:00
[test/solid-pattern-cache-stress] Do what it says on the tin.
Actually draw to the surface after setting the source in order to trigger use of the solid surface cache.
This commit is contained in:
parent
233ba271d6
commit
38c4bcc2da
3 changed files with 121 additions and 34 deletions
|
|
@ -638,6 +638,7 @@ REFERENCE_IMAGES = \
|
|||
stroke-image-pdf-ref.png \
|
||||
stroke-image-ps-ref.png \
|
||||
stroke-image-quartz-ref.png \
|
||||
solid-pattern-cache-stress-ref.png \
|
||||
source-clip-ref.png \
|
||||
source-clip-scale-quartz-ref.png \
|
||||
source-clip-scale-ps-argb32-ref.png \
|
||||
|
|
|
|||
BIN
test/solid-pattern-cache-stress-ref.png
Normal file
BIN
test/solid-pattern-cache-stress-ref.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 107 B |
|
|
@ -28,17 +28,7 @@
|
|||
#endif
|
||||
|
||||
#include "cairo-test.h"
|
||||
|
||||
static cairo_test_draw_function_t draw;
|
||||
|
||||
cairo_test_t test = {
|
||||
"solid-pattern-cache-stress",
|
||||
"Stress the solid pattern cache and ensure it behaves",
|
||||
0, 0,
|
||||
draw
|
||||
};
|
||||
#include <cairo.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdlib.h> /* drand48() */
|
||||
|
||||
#define LOOPS 10
|
||||
#define NRAND 100
|
||||
|
|
@ -47,6 +37,110 @@ cairo_test_t test = {
|
|||
#define drand48() (rand () / (double) RAND_MAX)
|
||||
#endif
|
||||
|
||||
static cairo_test_draw_function_t draw;
|
||||
|
||||
cairo_test_t test = {
|
||||
"solid-pattern-cache-stress",
|
||||
"Stress the solid pattern cache and ensure it behaves",
|
||||
1, 1,
|
||||
draw
|
||||
};
|
||||
|
||||
static cairo_t *
|
||||
_cairo_create_similar (cairo_t *cr, int width, int height)
|
||||
{
|
||||
cairo_surface_t *similar;
|
||||
|
||||
similar = cairo_surface_create_similar (cairo_get_target (cr),
|
||||
cairo_surface_get_content (cairo_get_target (cr)),
|
||||
width, height);
|
||||
cr = cairo_create (similar);
|
||||
cairo_surface_destroy (similar);
|
||||
|
||||
return cr;
|
||||
}
|
||||
|
||||
static cairo_t *
|
||||
_cairo_create_image (cairo_t *cr, cairo_format_t format, int width, int height)
|
||||
{
|
||||
cairo_surface_t *image;
|
||||
|
||||
image = cairo_image_surface_create (format, width, height);
|
||||
cr = cairo_create (image);
|
||||
cairo_surface_destroy (image);
|
||||
|
||||
return cr;
|
||||
}
|
||||
|
||||
static void
|
||||
_draw (cairo_t *cr,
|
||||
double red,
|
||||
double green,
|
||||
double blue)
|
||||
{
|
||||
cairo_text_extents_t extents;
|
||||
|
||||
cairo_set_source_rgb (cr, red, green, blue);
|
||||
cairo_paint (cr);
|
||||
|
||||
cairo_move_to (cr, 0, 0);
|
||||
cairo_line_to (cr, 1, 1);
|
||||
cairo_stroke (cr);
|
||||
|
||||
cairo_mask (cr, cairo_get_source (cr));
|
||||
|
||||
cairo_text_extents (cr, "cairo", &extents);
|
||||
cairo_move_to (cr,
|
||||
-extents.x_bearing - .5 * extents.width,
|
||||
-extents.y_bearing - .5 * extents.height);
|
||||
cairo_show_text (cr, "cairo");
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
use_similar (cairo_t *cr,
|
||||
double red,
|
||||
double green,
|
||||
double blue)
|
||||
{
|
||||
cr = _cairo_create_similar (cr, 1, 1);
|
||||
|
||||
_draw (cr, red, green, blue);
|
||||
|
||||
cairo_destroy (cr);
|
||||
}
|
||||
|
||||
static void
|
||||
use_image (cairo_t *cr,
|
||||
cairo_format_t format,
|
||||
double red,
|
||||
double green,
|
||||
double blue)
|
||||
{
|
||||
cr = _cairo_create_image (cr, format, 1, 1);
|
||||
|
||||
_draw (cr, red, green, blue);
|
||||
|
||||
cairo_destroy (cr);
|
||||
}
|
||||
|
||||
static void
|
||||
use_solid (cairo_t *cr,
|
||||
double red,
|
||||
double green,
|
||||
double blue)
|
||||
{
|
||||
/* mix in dissimilar solids */
|
||||
use_image (cr, CAIRO_FORMAT_A1, red, green, blue);
|
||||
use_image (cr, CAIRO_FORMAT_A8, red, green, blue);
|
||||
use_image (cr, CAIRO_FORMAT_RGB24, red, green, blue);
|
||||
use_image (cr, CAIRO_FORMAT_ARGB32, red, green, blue);
|
||||
|
||||
use_similar (cr, red, green, blue);
|
||||
|
||||
_draw (cr, red, green, blue);
|
||||
}
|
||||
|
||||
static cairo_test_status_t
|
||||
draw (cairo_t *cr, int width, int height)
|
||||
{
|
||||
|
|
@ -54,32 +148,25 @@ draw (cairo_t *cr, int width, int height)
|
|||
int i;
|
||||
|
||||
for (loop = 0; loop < LOOPS; loop++) {
|
||||
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); /* black */
|
||||
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0); /* red */
|
||||
cairo_set_source_rgb (cr, 0.0, 1.0, 0.0); /* green */
|
||||
cairo_set_source_rgb (cr, 1.0, 1.0, 0.0); /* yellow */
|
||||
cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); /* blue */
|
||||
cairo_set_source_rgb (cr, 1.0, 0.0, 1.0); /* magenta */
|
||||
cairo_set_source_rgb (cr, 0.0, 1.0, 1.0); /* cyan */
|
||||
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
|
||||
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); /* black */
|
||||
cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 1.0); /* red */
|
||||
cairo_set_source_rgba (cr, 0.0, 1.0, 0.0, 1.0); /* green */
|
||||
cairo_set_source_rgba (cr, 1.0, 1.0, 0.0, 1.0); /* yellow */
|
||||
cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, 1.0); /* blue */
|
||||
cairo_set_source_rgba (cr, 1.0, 0.0, 1.0, 1.0); /* magenta */
|
||||
cairo_set_source_rgba (cr, 0.0, 1.0, 1.0, 1.0); /* cyan */
|
||||
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0); /* white */
|
||||
for (i = 0; i < LOOPS; i++) {
|
||||
use_solid (cr, 0.0, 0.0, 0.0); /* black */
|
||||
use_solid (cr, 1.0, 0.0, 0.0); /* red */
|
||||
use_solid (cr, 0.0, 1.0, 0.0); /* green */
|
||||
use_solid (cr, 1.0, 1.0, 0.0); /* yellow */
|
||||
use_solid (cr, 0.0, 0.0, 1.0); /* blue */
|
||||
use_solid (cr, 1.0, 0.0, 1.0); /* magenta */
|
||||
use_solid (cr, 0.0, 1.0, 1.0); /* cyan */
|
||||
use_solid (cr, 1.0, 1.0, 1.0); /* white */
|
||||
}
|
||||
|
||||
for (i = 0; i < NRAND; i++)
|
||||
cairo_set_source_rgba (cr,
|
||||
drand48 (),
|
||||
drand48 (),
|
||||
drand48 (),
|
||||
drand48 ());
|
||||
use_solid (cr, drand48 (), drand48 (), drand48 ());
|
||||
}
|
||||
|
||||
/* stress test only, so clear the surface before comparing */
|
||||
cairo_set_source_rgb (cr, 0, 0, 1);
|
||||
cairo_paint (cr);
|
||||
|
||||
return CAIRO_TEST_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -88,4 +175,3 @@ main (void)
|
|||
{
|
||||
return cairo_test (&test);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue