Reverted changes to ds_perf_evaluator.
diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index 3ecee7e..82f82d9 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -1429,11 +1429,11 @@
return status;
}
-/*
- Pointer to a function that updates the score of a device (ex: device->score)
- The function should return DS_SUCCESS if there's no error to be reported.
+/* Pointer to a function that calculates the score of a device (ex: device->score)
+ update the data size of score. The encoding and the format of the score data
+ is implementation defined. The function should return DS_SUCCESS if there's no error to be reported.
*/
-typedef ds_status (*ds_perf_evaluator)(ds_device* device);
+typedef ds_status (*ds_perf_evaluator)(ds_device* device, void* data);
typedef enum {
DS_EVALUATE_ALL
@@ -1441,7 +1441,7 @@
} ds_evaluation_type;
static ds_status profileDevices(ds_profile* profile, const ds_evaluation_type type
- ,ds_perf_evaluator evaluator, unsigned int* numUpdates) {
+ ,ds_perf_evaluator evaluator, void* evaluatorData, unsigned int* numUpdates) {
ds_status status = DS_SUCCESS;
unsigned int i;
unsigned int updates = 0;
@@ -1462,7 +1462,7 @@
break;
/* else fall through */
case DS_EVALUATE_ALL:
- evaluatorStatus = evaluator(profile->devices+i);
+ evaluatorStatus = evaluator(profile->devices+i,evaluatorData);
if (evaluatorStatus != DS_SUCCESS) {
status = evaluatorStatus;
return status;
@@ -1941,104 +1941,122 @@
typedef double AccelerateScoreType;
-static ds_status AcceleratePerfEvaluator(ds_device* device) {
+static ds_status AcceleratePerfEvaluator(ds_device *device,
+ void *magick_unused(data))
+{
+#define ACCELERATE_PERF_DIMEN "2048x1536"
+#define NUM_ITER 2
+#define ReturnStatus(status) \
+{ \
+ if (clEnv!=NULL) \
+ RelinquishMagickOpenCLEnv(clEnv); \
+ if (oldClEnv!=NULL) \
+ defaultCLEnv = oldClEnv; \
+ return status; \
+}
- ds_status status = DS_SUCCESS;
- MagickCLEnv clEnv = NULL;
- MagickCLEnv oldClEnv = NULL;
- ExceptionInfo* exception = NULL;
- AccelerateTimer timer;
+ AccelerateTimer
+ timer;
- if (device == NULL) {
- status = DS_PERF_EVALUATOR_ERROR;
- goto cleanup;
- }
+ ExceptionInfo
+ *exception=NULL;
- clEnv = AcquireMagickOpenCLEnv();
- exception = AcquireExceptionInfo();
+ MagickCLEnv
+ clEnv=NULL,
+ oldClEnv=NULL;
- if (device->type == DS_DEVICE_NATIVE_CPU) {
- /* CPU device */
- MagickBooleanType flag = MagickTrue;
- SetMagickOpenCLEnvParamInternal(clEnv, MAGICK_OPENCL_ENV_PARAM_OPENCL_DISABLED
- , sizeof(MagickBooleanType), &flag, exception);
- }
- else if (device->type == DS_DEVICE_OPENCL_DEVICE) {
- /* OpenCL device */
- SetMagickOpenCLEnvParamInternal(clEnv, MAGICK_OPENCL_ENV_PARAM_DEVICE
- , sizeof(cl_device_id), &device->oclDeviceID,exception);
- }
- else {
- status = DS_PERF_EVALUATOR_ERROR;
- goto cleanup;
- }
- InitOpenCLEnvInternal(clEnv, exception);
- oldClEnv = defaultCLEnv;
- defaultCLEnv = clEnv;
+ magick_unreferenced(data);
+
+ if (device == NULL)
+ ReturnStatus(DS_PERF_EVALUATOR_ERROR);
+
+ clEnv=AcquireMagickOpenCLEnv();
+ exception=AcquireExceptionInfo();
+
+ if (device->type == DS_DEVICE_NATIVE_CPU)
+ {
+ /* CPU device */
+ MagickBooleanType flag=MagickTrue;
+ SetMagickOpenCLEnvParamInternal(clEnv,
+ MAGICK_OPENCL_ENV_PARAM_OPENCL_DISABLED,sizeof(MagickBooleanType),
+ &flag,exception);
+ }
+ else if (device->type == DS_DEVICE_OPENCL_DEVICE)
+ {
+ /* OpenCL device */
+ SetMagickOpenCLEnvParamInternal(clEnv,MAGICK_OPENCL_ENV_PARAM_DEVICE,
+ sizeof(cl_device_id),&device->oclDeviceID,exception);
+ }
+ else
+ ReturnStatus(DS_PERF_EVALUATOR_ERROR);
+
+ InitOpenCLEnvInternal(clEnv,exception);
+ oldClEnv=defaultCLEnv;
+ defaultCLEnv=clEnv;
/* microbenchmark */
{
-#define ACCELERATE_PERF_DIMEN "2048x1536"
-#define NUM_ITER 2
+ Image
+ *inputImage;
- Image* inputImage;
- ImageInfo* imageInfo;
- int i;
+ ImageInfo
+ *imageInfo;
- imageInfo = AcquireImageInfo();
+ int
+ i;
+
+ imageInfo=AcquireImageInfo();
CloneString(&imageInfo->size,ACCELERATE_PERF_DIMEN);
CopyMagickString(imageInfo->filename,"xc:none",MaxTextExtent);
- inputImage = ReadImage(imageInfo,exception);
+ inputImage=ReadImage(imageInfo,exception);
initAccelerateTimer(&timer);
- for (i = 0; i <=NUM_ITER; i++) {
-
- Image* bluredImage;
- Image* unsharpedImage;
- Image* resizedImage;
+ for (i=0; i<=NUM_ITER; i++)
+ {
+ Image
+ *bluredImage,
+ *resizedImage,
+ *unsharpedImage;
if (i > 0)
startAccelerateTimer(&timer);
#ifdef MAGICKCORE_CLPERFMARKER
- clBeginPerfMarkerAMD("PerfEvaluatorRegion","");
+ clBeginPerfMarkerAMD("PerfEvaluatorRegion","");
#endif
- bluredImage = BlurImage(inputImage, 10.0f, 3.5f, exception);
- unsharpedImage = UnsharpMaskImage(bluredImage, 2.0f,2.0f,50.0f,10.0f,exception);
- resizedImage = ResizeImage(unsharpedImage,640,480,LanczosFilter,exception);
+ bluredImage=BlurImage(inputImage,10.0f,3.5f,exception);
+ unsharpedImage=UnsharpMaskImage(bluredImage,2.0f,2.0f,50.0f,10.0f,
+ exception);
+ resizedImage=ResizeImage(unsharpedImage,640,480,LanczosFilter,
+ exception);
#ifdef MAGICKCORE_CLPERFMARKER
- clEndPerfMarkerAMD();
+ clEndPerfMarkerAMD();
#endif
if (i > 0)
stopAccelerateTimer(&timer);
- if (bluredImage) DestroyImage(bluredImage);
- if (unsharpedImage) DestroyImage(unsharpedImage);
- if (resizedImage) DestroyImage(resizedImage);
+ if (bluredImage)
+ DestroyImage(bluredImage);
+ if (unsharpedImage)
+ DestroyImage(unsharpedImage);
+ if (resizedImage)
+ DestroyImage(resizedImage);
}
DestroyImage(inputImage);
}
/* end of microbenchmark */
- if (device->score == NULL) {
- device->score = malloc(sizeof(AccelerateScoreType));
- }
- *(AccelerateScoreType*)device->score = readAccelerateTimer(&timer);
+ if (device->score == NULL)
+ device->score=malloc(sizeof(AccelerateScoreType));
+ *(AccelerateScoreType*)device->score=readAccelerateTimer(&timer);
-cleanup:
- if (clEnv!=NULL)
- RelinquishMagickOpenCLEnv(clEnv);
- if (oldClEnv!=NULL)
- defaultCLEnv = oldClEnv;
- return status;
+ ReturnStatus(DS_SUCCESS);
}
-
-
ds_status AccelerateScoreSerializer(ds_device* device, void** serializedScore, unsigned int* serializedScoreSize) {
if (device
&& device->score) {
@@ -2105,7 +2123,7 @@
,DirectorySeparator,IMAGEMAGICK_PROFILE_FILE);
readProfileFromFile(profile, AccelerateScoreDeserializer, path);
- status = profileDevices(profile, DS_EVALUATE_NEW_ONLY, AcceleratePerfEvaluator, &numDeviceProfiled);
+ status = profileDevices(profile, DS_EVALUATE_NEW_ONLY, AcceleratePerfEvaluator, NULL, &numDeviceProfiled);
if (status!=DS_SUCCESS) {
(void) ThrowMagickException(exception, GetMagickModule(), ModuleFatalError, "Error when initializing the profile", "'%s'", ".");
goto cleanup;