Performance slow down
"Stefan v. Wachter" <[email protected]> Wed, 30 Mar 2005 16:34:24 +0200
| Newsgroups | gmane.comp.video.graphicsmagick.apis |
|---|---|
| Message-ID | <[email protected]> |
Hello, Usings the C- API of GraphicsMagick 1.1.5 on windows (Win2000 or XP) we encountered a mysterious slow down after processing of some hundreds of frames. The performance goes down to about 40 percent of the initial value. The slow down - as far as I can see - does not occurs on the Linux platform. There is no memory leak visible. I modified the drawtest module (see attachment: drawtest.c and slowDownLog.txt) to reproduce the effect. Appearently it occurs only with a combination of actions i.g. annotate an image and write it to disk. For me it not necessarily associated with the annotate operation. The test image I used is a 720 x 576 Grayscale TGA image. Please tell me your opinion how to track down this problem. Thanks in advance, Stefan v. Wachter ALPHA-OMEGA digital GmbH Munich, Germany
drawtest.c
(text/plain, 3.3 KB)
/*
*
* Test program for C drawing API
* Written by Bob Friesenhahn
*
*/
#if !defined(_VISUALC_)
#include <magick_config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#if defined(_VISUALC_)
#include <stdlib.h>
#include <sys\types.h>
#include <windows.h>
#endif
#include <time.h>
#include <magick/api.h>
#include <magick/color.h>
#if !defined(True)
# define True 1
#endif
#if !defined(False)
# define False 0
#endif
static void ScribbleImage ( Image *image)
{
}
int main ( int argc, char **argv )
{
Image *theImage = (Image *)NULL;
char infile[MaxTextExtent];
int rows, columns = 0;
char size[MaxTextExtent];
ImageInfo *image_info;
ExceptionInfo exception;
char dummyChar;
ImageType dummyImageType, i, ii;
char* outfile = "outImageTemp.tga";
char* theFont = "Arial";
char* fillColor = "black";
double fontSize = 14;
int xPos = 20;
int yPos = 30;
char* theText = "TestText45897";
DWORD dwStartTicks = 0;
DWORD dwFinishTicks = 0;
DWORD nTicksPer10Frames = 0;
//CubeInfo *cube_info;
if ( argc != 2 )
{
(void) printf ( "Usage: %s filename\n", argv[0] );
exit( 1 );
}
(void) strncpy( infile, argv[1], MaxTextExtent-1 );
if (LocaleNCompare("drawtest",argv[0],7) == 0)
InitializeMagick((char *) NULL);
else
InitializeMagick(*argv);
/*
* Create canvas image
*/
/* columns=596; */
/* rows=842; */
image_info=CloneImageInfo((ImageInfo*)NULL);
GetExceptionInfo( &exception );
/* FormatString(size, "%dx%d", columns, rows); */
/* CloneString(&image_info->size, size); */
/* CloneString(&image_info->size, "720 x 576"); */
(void) strcpy( image_info->filename, infile);
theImage = ReadImage ( image_info, &exception );
if (exception.severity != UndefinedException)
CatchException(&exception);
if ( theImage == (Image *)NULL )
{
printf ( "Failed to read image %s\n", image_info->filename );
exit(1);
}
for ( i = 0; i < 1000; i++) {
dwStartTicks = GetTickCount();
for ( ii = 0; ii < 10; ii++) {
DrawContext drawContext = DrawAllocateContext ( NULL, theImage );
DrawSetStrokeColorString (drawContext, fillColor);
// DrawSetFillColorString (drawContext,"#000000");
// DrawSetFillColorString (drawContext, fillColor);
DrawSetStrokeWidth (drawContext, 1);
DrawSetFont( drawContext, AllocateString (theFont));
// void DrawSetFontFamily ( DrawContext context, const char *font_family ); ?
DrawSetFontSize( drawContext, fontSize);
DrawAnnotation ( drawContext, xPos , yPos, (unsigned char*)theText );
DrawRender(drawContext);
DrawDestroyContext(drawContext);
/*
* Save image to file
*/
(void) strncpy( theImage->filename, outfile, sizeof(image_info->filename)-1);
WriteImage ( image_info, theImage );
// dummyImageType =GetImageType(theImage, &exception);
// IsPaletteImage(theImage, &exception);
// cube_info=GetCubeInfo();
// DestroyCubeInfo(cube_info);
}
dwFinishTicks = GetTickCount();
nTicksPer10Frames = dwFinishTicks - dwStartTicks;
printf ( "loop: %i; nTicksPer10Frames %i\n", i, nTicksPer10Frames);
}
DestroyExceptionInfo( &exception );
DestroyImage( theImage );
DestroyImageInfo( image_info );
dummyChar = getchar();
DestroyMagick();
return 0;
}
slowDownLog.txt
(text/plain, 8.4 KB)
loop: 0; nTicksPer10Frames 765 loop: 1; nTicksPer10Frames 360 loop: 2; nTicksPer10Frames 406 loop: 3; nTicksPer10Frames 391 loop: 4; nTicksPer10Frames 406 loop: 5; nTicksPer10Frames 406 loop: 6; nTicksPer10Frames 422 loop: 7; nTicksPer10Frames 438 loop: 8; nTicksPer10Frames 437 loop: 9; nTicksPer10Frames 453 loop: 10; nTicksPer10Frames 485 loop: 11; nTicksPer10Frames 453 loop: 12; nTicksPer10Frames 468 loop: 13; nTicksPer10Frames 454 loop: 14; nTicksPer10Frames 500 loop: 15; nTicksPer10Frames 515 loop: 16; nTicksPer10Frames 594 loop: 17; nTicksPer10Frames 500 loop: 18; nTicksPer10Frames 500 loop: 19; nTicksPer10Frames 531 loop: 20; nTicksPer10Frames 531 loop: 21; nTicksPer10Frames 594 loop: 22; nTicksPer10Frames 547 loop: 23; nTicksPer10Frames 547 loop: 24; nTicksPer10Frames 531 loop: 25; nTicksPer10Frames 547 loop: 26; nTicksPer10Frames 609 loop: 27; nTicksPer10Frames 657 loop: 28; nTicksPer10Frames 640 loop: 29; nTicksPer10Frames 578 loop: 30; nTicksPer10Frames 594 loop: 31; nTicksPer10Frames 641 loop: 32; nTicksPer10Frames 625 loop: 33; nTicksPer10Frames 609 loop: 34; nTicksPer10Frames 719 loop: 35; nTicksPer10Frames 641 loop: 36; nTicksPer10Frames 593 loop: 37; nTicksPer10Frames 625 loop: 38; nTicksPer10Frames 641 loop: 39; nTicksPer10Frames 625 loop: 40; nTicksPer10Frames 625 loop: 41; nTicksPer10Frames 641 loop: 42; nTicksPer10Frames 640 loop: 43; nTicksPer10Frames 641 loop: 44; nTicksPer10Frames 672 loop: 45; nTicksPer10Frames 656 loop: 46; nTicksPer10Frames 703 loop: 47; nTicksPer10Frames 688 loop: 48; nTicksPer10Frames 687 loop: 49; nTicksPer10Frames 672 loop: 50; nTicksPer10Frames 687 loop: 51; nTicksPer10Frames 719 loop: 52; nTicksPer10Frames 703 loop: 53; nTicksPer10Frames 703 loop: 54; nTicksPer10Frames 735 loop: 55; nTicksPer10Frames 719 loop: 56; nTicksPer10Frames 718 loop: 57; nTicksPer10Frames 797 loop: 58; nTicksPer10Frames 766 loop: 59; nTicksPer10Frames 750 loop: 60; nTicksPer10Frames 922 loop: 61; nTicksPer10Frames 812 loop: 62; nTicksPer10Frames 750 loop: 63; nTicksPer10Frames 781 loop: 64; nTicksPer10Frames 766 loop: 65; nTicksPer10Frames 797 loop: 66; nTicksPer10Frames 828 loop: 67; nTicksPer10Frames 797 loop: 68; nTicksPer10Frames 812 loop: 69; nTicksPer10Frames 844 loop: 70; nTicksPer10Frames 922 loop: 71; nTicksPer10Frames 828 loop: 72; nTicksPer10Frames 860 loop: 73; nTicksPer10Frames 859 loop: 74; nTicksPer10Frames 922 loop: 75; nTicksPer10Frames 844 loop: 76; nTicksPer10Frames 859 loop: 77; nTicksPer10Frames 891 loop: 78; nTicksPer10Frames 921 loop: 79; nTicksPer10Frames 875 loop: 80; nTicksPer10Frames 891 loop: 81; nTicksPer10Frames 875 loop: 82; nTicksPer10Frames 906 loop: 83; nTicksPer10Frames 907 loop: 84; nTicksPer10Frames 890 loop: 85; nTicksPer10Frames 922 loop: 86; nTicksPer10Frames 922 loop: 87; nTicksPer10Frames 922 loop: 88; nTicksPer10Frames 953 loop: 89; nTicksPer10Frames 969 loop: 90; nTicksPer10Frames 937 loop: 91; nTicksPer10Frames 953 loop: 92; nTicksPer10Frames 969 loop: 93; nTicksPer10Frames 969 loop: 94; nTicksPer10Frames 984 loop: 95; nTicksPer10Frames 1000 loop: 96; nTicksPer10Frames 969 loop: 97; nTicksPer10Frames 984 loop: 98; nTicksPer10Frames 985 loop: 99; nTicksPer10Frames 1015 loop: 100; nTicksPer10Frames 1000 loop: 101; nTicksPer10Frames 1000 loop: 102; nTicksPer10Frames 1016 loop: 103; nTicksPer10Frames 1016 loop: 104; nTicksPer10Frames 1015 loop: 105; nTicksPer10Frames 1031 loop: 106; nTicksPer10Frames 1125 loop: 107; nTicksPer10Frames 1063 loop: 108; nTicksPer10Frames 1047 loop: 109; nTicksPer10Frames 1344 loop: 110; nTicksPer10Frames 1171 loop: 111; nTicksPer10Frames 1125 loop: 112; nTicksPer10Frames 1110 loop: 113; nTicksPer10Frames 1156 loop: 114; nTicksPer10Frames 1266 loop: 115; nTicksPer10Frames 1172 loop: 116; nTicksPer10Frames 1250 loop: 117; nTicksPer10Frames 1265 loop: 118; nTicksPer10Frames 1188 loop: 119; nTicksPer10Frames 1203 loop: 120; nTicksPer10Frames 1172 loop: 121; nTicksPer10Frames 1203 loop: 122; nTicksPer10Frames 1265 loop: 123; nTicksPer10Frames 1579 loop: 124; nTicksPer10Frames 1218 loop: 125; nTicksPer10Frames 1282 loop: 126; nTicksPer10Frames 1265 loop: 127; nTicksPer10Frames 1235 loop: 128; nTicksPer10Frames 1250 loop: 129; nTicksPer10Frames 1265 loop: 130; nTicksPer10Frames 1328 loop: 131; nTicksPer10Frames 1266 loop: 132; nTicksPer10Frames 1297 loop: 133; nTicksPer10Frames 1265 loop: 134; nTicksPer10Frames 1297 loop: 135; nTicksPer10Frames 1328 loop: 136; nTicksPer10Frames 1266 loop: 137; nTicksPer10Frames 1281 loop: 138; nTicksPer10Frames 1313 loop: 139; nTicksPer10Frames 1328 loop: 140; nTicksPer10Frames 1328 loop: 141; nTicksPer10Frames 1328 loop: 142; nTicksPer10Frames 1344 loop: 143; nTicksPer10Frames 1359 loop: 144; nTicksPer10Frames 1375 loop: 145; nTicksPer10Frames 1375 loop: 146; nTicksPer10Frames 1328 loop: 147; nTicksPer10Frames 1407 loop: 148; nTicksPer10Frames 1390 loop: 149; nTicksPer10Frames 1360 loop: 150; nTicksPer10Frames 1422 loop: 151; nTicksPer10Frames 1406 loop: 152; nTicksPer10Frames 1437 loop: 153; nTicksPer10Frames 1422 loop: 154; nTicksPer10Frames 1406 loop: 155; nTicksPer10Frames 1438 loop: 156; nTicksPer10Frames 1391 loop: 157; nTicksPer10Frames 1500 loop: 158; nTicksPer10Frames 1421 loop: 159; nTicksPer10Frames 1469 loop: 160; nTicksPer10Frames 1453 loop: 161; nTicksPer10Frames 1485 loop: 162; nTicksPer10Frames 1437 loop: 163; nTicksPer10Frames 1547 loop: 164; nTicksPer10Frames 1484 loop: 165; nTicksPer10Frames 1516 loop: 166; nTicksPer10Frames 1484 loop: 167; nTicksPer10Frames 1579 loop: 168; nTicksPer10Frames 1468 loop: 169; nTicksPer10Frames 1532 loop: 170; nTicksPer10Frames 1484 loop: 171; nTicksPer10Frames 1562 loop: 172; nTicksPer10Frames 1485 loop: 173; nTicksPer10Frames 1594 loop: 174; nTicksPer10Frames 1515 loop: 175; nTicksPer10Frames 1594 loop: 176; nTicksPer10Frames 1562 loop: 177; nTicksPer10Frames 1610 loop: 178; nTicksPer10Frames 1594 loop: 179; nTicksPer10Frames 1562 loop: 180; nTicksPer10Frames 1609 loop: 181; nTicksPer10Frames 1594 loop: 182; nTicksPer10Frames 1594 loop: 183; nTicksPer10Frames 1609 loop: 184; nTicksPer10Frames 1563 loop: 185; nTicksPer10Frames 1640 loop: 186; nTicksPer10Frames 1625 loop: 187; nTicksPer10Frames 1625 loop: 188; nTicksPer10Frames 1688 loop: 189; nTicksPer10Frames 1641 loop: 190; nTicksPer10Frames 1640 loop: 191; nTicksPer10Frames 1703 loop: 192; nTicksPer10Frames 1672 loop: 193; nTicksPer10Frames 1656 loop: 194; nTicksPer10Frames 1688 loop: 195; nTicksPer10Frames 1641 loop: 196; nTicksPer10Frames 1687 loop: 197; nTicksPer10Frames 1703 loop: 198; nTicksPer10Frames 1703 loop: 199; nTicksPer10Frames 1703 loop: 200; nTicksPer10Frames 1719 loop: 201; nTicksPer10Frames 1813 loop: 202; nTicksPer10Frames 1687 loop: 203; nTicksPer10Frames 1750 loop: 204; nTicksPer10Frames 1750 loop: 205; nTicksPer10Frames 1797 loop: 206; nTicksPer10Frames 1719 loop: 207; nTicksPer10Frames 1750 loop: 208; nTicksPer10Frames 1765 loop: 209; nTicksPer10Frames 1813 loop: 210; nTicksPer10Frames 1734 loop: 211; nTicksPer10Frames 1782 loop: 212; nTicksPer10Frames 1859 loop: 213; nTicksPer10Frames 1797 loop: 214; nTicksPer10Frames 1812 loop: 215; nTicksPer10Frames 1891 loop: 216; nTicksPer10Frames 1766 loop: 217; nTicksPer10Frames 1812 loop: 218; nTicksPer10Frames 1828 loop: 219; nTicksPer10Frames 1844 loop: 220; nTicksPer10Frames 1844 loop: 221; nTicksPer10Frames 1875 loop: 222; nTicksPer10Frames 1828 loop: 223; nTicksPer10Frames 1844 loop: 224; nTicksPer10Frames 1890 loop: 225; nTicksPer10Frames 1922 loop: 226; nTicksPer10Frames 1875 loop: 227; nTicksPer10Frames 1922 loop: 228; nTicksPer10Frames 1937 loop: 229; nTicksPer10Frames 1891 loop: 230; nTicksPer10Frames 1906 loop: 231; nTicksPer10Frames 1875 loop: 232; nTicksPer10Frames 1953 loop: 233; nTicksPer10Frames 1907 loop: 234; nTicksPer10Frames 1953 loop: 235; nTicksPer10Frames 1984 loop: 236; nTicksPer10Frames 1938 loop: 237; nTicksPer10Frames 1968 loop: 238; nTicksPer10Frames 1969 loop: 239; nTicksPer10Frames 2000 loop: 240; nTicksPer10Frames 1969 loop: 241; nTicksPer10Frames 1969 loop: 242; nTicksPer10Frames 2047 loop: 243; nTicksPer10Frames 2046 loop: 244; nTicksPer10Frames 2079 loop: 245; nTicksPer10Frames 2000 loop: 246; nTicksPer10Frames 2125 loop: 247; nTicksPer10Frames 2046 loop: 248; nTicksPer10Frames 2047 loop: 249; nTicksPer10Frames 2110 loop: 250; nTicksPer10Frames 2047 loop: 251; nTicksPer10Frames 2031 loop: 252; nTicksPer10Frames 2094 loop: 253; nTicksPer10Frames 2031 loop: 254; nTicksPer10Frames 2156 loop: 255; nTicksPer10Frames 2063 loop: 256; nTicksPer10Frames 2171 loop: 257; nTicksPer10Frames 2344