Title: [96723] trunk/Tools
Revision
96723
Author
commit-qu...@webkit.org
Date
2011-10-05 10:51:24 -0700 (Wed, 05 Oct 2011)

Log Message

[EFL] Fix Evas_Object_Image reference counts and file descriptor leakage in ImageDiff.
https://bugs.webkit.org/show_bug.cgi?id=68449

Patch by Raphael Kubo da Costa <k...@profusion.mobi> on 2011-10-05
Reviewed by Antonio Gomes.

evas_render() must be called to close up temporary files and unmap unused
resources. evas_object_image_data_set() must be called after an
evas_object_image_data_get() to balance an internal reference count.

* DumpRenderTree/efl/ImageDiff.cpp:
(differenceImageFromDifferenceBuffer):
(calculateDifference):
(printImage):
(printImageDifferences):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (96722 => 96723)


--- trunk/Tools/ChangeLog	2011-10-05 17:44:26 UTC (rev 96722)
+++ trunk/Tools/ChangeLog	2011-10-05 17:51:24 UTC (rev 96723)
@@ -1,3 +1,20 @@
+2011-10-05  Raphael Kubo da Costa  <k...@profusion.mobi>
+
+        [EFL] Fix Evas_Object_Image reference counts and file descriptor leakage in ImageDiff.
+        https://bugs.webkit.org/show_bug.cgi?id=68449
+
+        Reviewed by Antonio Gomes.
+
+        evas_render() must be called to close up temporary files and unmap unused
+        resources. evas_object_image_data_set() must be called after an
+        evas_object_image_data_get() to balance an internal reference count.
+
+        * DumpRenderTree/efl/ImageDiff.cpp:
+        (differenceImageFromDifferenceBuffer):
+        (calculateDifference):
+        (printImage):
+        (printImageDifferences):
+
 2011-10-05  Balazs Kelemen  <kbal...@webkit.org>
 
         [Qt][WK2] Unreviewed build fix.

Modified: trunk/Tools/DumpRenderTree/efl/ImageDiff.cpp (96722 => 96723)


--- trunk/Tools/DumpRenderTree/efl/ImageDiff.cpp	2011-10-05 17:44:26 UTC (rev 96722)
+++ trunk/Tools/DumpRenderTree/efl/ImageDiff.cpp	2011-10-05 17:51:24 UTC (rev 96723)
@@ -82,6 +82,8 @@
         }
     }
 
+    evas_object_image_data_set(image, diffPixels);
+
     return image;
 }
 
@@ -104,7 +106,7 @@
     return sqrtf(red * red + green * green + blue * blue + alpha * alpha) / 2.0f;
 }
 
-static float calculateDifference(const Evas_Object* baselineImage, const Evas_Object* actualImage, OwnPtr<Evas_Object>& differenceImage)
+static float calculateDifference(Evas_Object* baselineImage, Evas_Object* actualImage, OwnPtr<Evas_Object>& differenceImage)
 {
     int width, height, baselineWidth, baselineHeight;
     evas_object_image_size_get(actualImage, &width, &height);
@@ -144,6 +146,11 @@
         }
     }
 
+    // When using evas_object_image_data_get(), a complementary evas_object_data_set() must be
+    // issued to balance the reference count, even if the image hasn't been changed.
+    evas_object_image_data_set(baselineImage, basePixels);
+    evas_object_image_data_set(actualImage, actualPixels);
+
     // Compute the difference as a percentage combining both the number of
     // different pixels and their difference amount i.e. the average distance
     // over the entire image
@@ -192,6 +199,8 @@
     if (tempImageFd == -1)
         abortWithErrorMessage("could not create temporary file");
 
+    evas_render(evas_object_evas_get(image));
+
     if (evas_object_image_save(image, fileName, 0, 0)) {
         struct stat fileInfo;
         if (!stat(fileName, &fileInfo)) {
@@ -208,7 +217,7 @@
     unlink(fileName);
 }
 
-static void printImageDifferences(const Evas_Object* baselineImage, Evas_Object* actualImage)
+static void printImageDifferences(Evas_Object* baselineImage, Evas_Object* actualImage)
 {
     OwnPtr<Evas_Object> differenceImage;
     const float difference = calculateDifference(baselineImage, actualImage, differenceImage);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to