Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: dm/DM.cpp

Issue 1711143002: DM: support --config {f16,srgb} (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: stray Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | dm/DMSrcSink.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "CrashHandler.h" 8 #include "CrashHandler.h"
9 #include "DMJsonWriter.h" 9 #include "DMJsonWriter.h"
10 #include "DMSrcSink.h" 10 #include "DMSrcSink.h"
11 #include "DMSrcSinkAndroid.h" 11 #include "DMSrcSinkAndroid.h"
12 #include "ProcStats.h" 12 #include "ProcStats.h"
13 #include "Resources.h" 13 #include "Resources.h"
14 #include "SkBBHFactory.h" 14 #include "SkBBHFactory.h"
15 #include "SkChecksum.h" 15 #include "SkChecksum.h"
16 #include "SkCodec.h" 16 #include "SkCodec.h"
17 #include "SkColorPriv.h"
17 #include "SkCommonFlags.h" 18 #include "SkCommonFlags.h"
18 #include "SkCommonFlagsConfig.h" 19 #include "SkCommonFlagsConfig.h"
19 #include "SkFontMgr.h" 20 #include "SkFontMgr.h"
20 #include "SkGraphics.h" 21 #include "SkGraphics.h"
22 #include "SkHalf.h"
21 #include "SkMD5.h" 23 #include "SkMD5.h"
22 #include "SkMutex.h" 24 #include "SkMutex.h"
23 #include "SkOSFile.h" 25 #include "SkOSFile.h"
26 #include "SkPM4fPriv.h"
24 #include "SkSpinlock.h" 27 #include "SkSpinlock.h"
25 #include "SkTHash.h" 28 #include "SkTHash.h"
26 #include "SkTaskGroup.h" 29 #include "SkTaskGroup.h"
27 #include "SkThreadUtils.h" 30 #include "SkThreadUtils.h"
28 #include "Test.h" 31 #include "Test.h"
29 #include "Timer.h" 32 #include "Timer.h"
30 #include "sk_tool_utils.h" 33 #include "sk_tool_utils.h"
31 34
32 #ifdef SK_PDF_IMAGE_STATS 35 #ifdef SK_PDF_IMAGE_STATS
33 extern void SkPDFImageDumpStats(); 36 extern void SkPDFImageDumpStats();
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 696
694 #define SINK(t, sink, ...) if (config->getBackend().equals(t)) { return new sink (__VA_ARGS__); } 697 #define SINK(t, sink, ...) if (config->getBackend().equals(t)) { return new sink (__VA_ARGS__); }
695 698
696 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK 699 #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
697 SINK("hwui", HWUISink); 700 SINK("hwui", HWUISink);
698 #endif 701 #endif
699 702
700 if (FLAGS_cpu) { 703 if (FLAGS_cpu) {
701 SINK("565", RasterSink, kRGB_565_SkColorType); 704 SINK("565", RasterSink, kRGB_565_SkColorType);
702 SINK("8888", RasterSink, kN32_SkColorType); 705 SINK("8888", RasterSink, kN32_SkColorType);
706 SINK("srgb", RasterSink, kN32_SkColorType, kSRGB_SkColorProfileType);
707 SINK("f16", RasterSink, kRGBA_F16_SkColorType);
703 SINK("pdf", PDFSink, "Pdfium"); 708 SINK("pdf", PDFSink, "Pdfium");
704 SINK("pdf_poppler", PDFSink, "Poppler"); 709 SINK("pdf_poppler", PDFSink, "Poppler");
705 SINK("skp", SKPSink); 710 SINK("skp", SKPSink);
706 SINK("svg", SVGSink); 711 SINK("svg", SVGSink);
707 SINK("null", NullSink); 712 SINK("null", NullSink);
708 SINK("xps", XPSSink); 713 SINK("xps", XPSSink);
709 } 714 }
710 #undef SINK 715 #undef SINK
711 return nullptr; 716 return nullptr;
712 } 717 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 } 775 }
771 if (sink) { 776 if (sink) {
772 push_sink(config, sink); 777 push_sink(config, sink);
773 } 778 }
774 } 779 }
775 } 780 }
776 781
777 static bool dump_png(SkBitmap bitmap, const char* path, const char* md5) { 782 static bool dump_png(SkBitmap bitmap, const char* path, const char* md5) {
778 const int w = bitmap.width(), 783 const int w = bitmap.width(),
779 h = bitmap.height(); 784 h = bitmap.height();
785 // PNG wants unpremultiplied 8-bit RGBA pixels (16-bit could work fine too).
786 // We leave the gamma of these bytes unspecified, to continue the status quo ,
787 // which we think generally is to interpret them as sRGB.
780 788
781 // First get the bitmap into N32 color format. The next step will work only there. 789 SkAutoTMalloc<uint32_t> rgba(w*h);
782 if (bitmap.colorType() != kN32_SkColorType) { 790
783 SkBitmap n32; 791 if (bitmap. colorType() == kN32_SkColorType &&
784 if (!bitmap.copyTo(&n32, kN32_SkColorType)) { 792 bitmap.profileType() == kSRGB_SkColorProfileType) {
793 // These are premul sRGB 8-bit pixels in SkPMColor order.
794 // We want unpremul sRGB 8-bit pixels in RGBA order. We'll get there vi a floats.
795 bitmap.lockPixels();
796 auto px = (const uint32_t*)bitmap.getPixels();
797 if (!px) {
785 return false; 798 return false;
786 } 799 }
787 bitmap = n32; 800 for (int i = 0; i < w*h; i++) {
788 } 801 Sk4f fs = Sk4f_fromS32(px[i]); // Convert up to linear float s.
802 #if defined(SK_PMCOLOR_IS_BGRA)
803 fs = SkNx_shuffle<2,1,0,3>(fs); // Shuffle to RGBA, if not th ere already.
804 #endif
805 float invA = 1.0f / fs[3];
806 fs = fs * Sk4f(invA, invA, invA, 1); // Unpremultiply.
807 rgba[i] = Sk4f_toS32(fs); // Pack down to sRGB bytes.
808 }
789 809
790 // Convert our N32 bitmap into unpremul RGBA for libpng. 810 } else if (bitmap.colorType() == kRGBA_F16_SkColorType) {
791 SkAutoTMalloc<uint32_t> rgba(w*h); 811 // These are premul linear half-float pixels in RGBA order.
792 if (!bitmap.readPixels(SkImageInfo::Make(w,h, kRGBA_8888_SkColorType, kUnpre mul_SkAlphaType), 812 // We want unpremul sRGB 8-bit pixels in RGBA order. We'll get there vi a floats.
793 rgba, 4*w, 0,0)) { 813 bitmap.lockPixels();
794 return false; 814 auto px = (const uint64_t*)bitmap.getPixels();
815 if (!px) {
816 return false;
817 }
818 for (int i = 0; i < w*h; i++) {
819 Sk4f fs = SkHalfToFloat_01(px[i]); // Convert up to linear floats .
820 float invA = 1.0f / fs[3];
821 fs = fs * Sk4f(invA, invA, invA, 1); // Unpremultiply.
822 rgba[i] = Sk4f_toS32(fs); // Pack down to sRGB bytes.
823 }
824
825
826 } else {
827 // We "should" gamma correct in here but we don't.
828 // We want Gold to show exactly what our clients are seeing, broken gamm a.
829
830 // Convert smaller formats up to premul linear 8-bit (in SkPMColor order ).
831 if (bitmap.colorType() != kN32_SkColorType) {
832 SkBitmap n32;
833 if (!bitmap.copyTo(&n32, kN32_SkColorType)) {
834 return false;
835 }
836 bitmap = n32;
837 }
838
839 // Convert premul linear 8-bit to unpremul linear 8-bit RGBA.
840 if (!bitmap.readPixels(SkImageInfo::Make(w,h, kRGBA_8888_SkColorType,
841 kUnpremul_SkAlphaType),
842 rgba, 4*w, 0,0)) {
843 return false;
844 }
795 } 845 }
796 846
797 // We don't need bitmap anymore. Might as well drop our ref. 847 // We don't need bitmap anymore. Might as well drop our ref.
798 bitmap.reset(); 848 bitmap.reset();
799 849
800 FILE* f = fopen(path, "wb"); 850 FILE* f = fopen(path, "wb");
801 if (!f) { return false; } 851 if (!f) { return false; }
802 852
803 png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nu llptr, nullptr); 853 png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nu llptr, nullptr);
804 if (!png) { 854 if (!png) {
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 Reporter* reporter, 1335 Reporter* reporter,
1286 GrContextFactory* fac tory); 1336 GrContextFactory* fac tory);
1287 } // namespace skiatest 1337 } // namespace skiatest
1288 1338
1289 #if !defined(SK_BUILD_FOR_IOS) 1339 #if !defined(SK_BUILD_FOR_IOS)
1290 int main(int argc, char** argv) { 1340 int main(int argc, char** argv) {
1291 SkCommandLineFlags::Parse(argc, argv); 1341 SkCommandLineFlags::Parse(argc, argv);
1292 return dm_main(); 1342 return dm_main();
1293 } 1343 }
1294 #endif 1344 #endif
OLDNEW
« no previous file with comments | « no previous file | dm/DMSrcSink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698