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

Side by Side Diff: third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp

Issue 1406403008: Reduce footprint of FilterEffectBuilder::build (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 | no next file » | 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 (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 24 matching lines...) Expand all
35 #include "platform/graphics/filters/FEColorMatrix.h" 35 #include "platform/graphics/filters/FEColorMatrix.h"
36 #include "platform/graphics/filters/FEComponentTransfer.h" 36 #include "platform/graphics/filters/FEComponentTransfer.h"
37 #include "platform/graphics/filters/FEDropShadow.h" 37 #include "platform/graphics/filters/FEDropShadow.h"
38 #include "platform/graphics/filters/FEGaussianBlur.h" 38 #include "platform/graphics/filters/FEGaussianBlur.h"
39 #include "platform/graphics/filters/SourceGraphic.h" 39 #include "platform/graphics/filters/SourceGraphic.h"
40 #include "wtf/MathExtras.h" 40 #include "wtf/MathExtras.h"
41 #include <algorithm> 41 #include <algorithm>
42 42
43 namespace blink { 43 namespace blink {
44 44
45 static inline void endMatrixRow(Vector<float>& parameters) 45 namespace {
46
47 inline void endMatrixRow(Vector<float>& matrix)
46 { 48 {
47 parameters.append(0); 49 matrix.uncheckedAppend(0);
48 parameters.append(0); 50 matrix.uncheckedAppend(0);
49 } 51 }
50 52
51 static inline void lastMatrixRow(Vector<float>& parameters) 53 inline void lastMatrixRow(Vector<float>& matrix)
52 { 54 {
53 parameters.append(0); 55 matrix.uncheckedAppend(0);
54 parameters.append(0); 56 matrix.uncheckedAppend(0);
55 parameters.append(0); 57 matrix.uncheckedAppend(0);
56 parameters.append(1); 58 matrix.uncheckedAppend(1);
57 parameters.append(0); 59 matrix.uncheckedAppend(0);
58 } 60 }
59 61
62 Vector<float> grayscaleMatrix(double amount)
63 {
64 double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0);
65
66 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#grayscale Equivalent
67 // for information on parameters.
68 Vector<float> matrix;
69 matrix.reserveInitialCapacity(20);
70
71 matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 + 0.7874 * oneMinusAmou nt));
72 matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmou nt));
73 matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmou nt));
74 endMatrixRow(matrix);
75
76 matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmou nt));
77 matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 + 0.2848 * oneMinusAmou nt));
78 matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmou nt));
79 endMatrixRow(matrix);
80
81 matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmou nt));
82 matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmou nt));
83 matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 + 0.9278 * oneMinusAmou nt));
84 endMatrixRow(matrix);
85
86 lastMatrixRow(matrix);
87 return matrix;
88 }
89
90 Vector<float> sepiaMatrix(double amount)
91 {
92 double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0);
93
94 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEqui valent
95 // for information on parameters.
96 Vector<float> matrix;
97 matrix.reserveInitialCapacity(20);
98
99 matrix.uncheckedAppend(narrowPrecisionToFloat(0.393 + 0.607 * oneMinusAmount ));
100 matrix.uncheckedAppend(narrowPrecisionToFloat(0.769 - 0.769 * oneMinusAmount ));
101 matrix.uncheckedAppend(narrowPrecisionToFloat(0.189 - 0.189 * oneMinusAmount ));
102 endMatrixRow(matrix);
103
104 matrix.uncheckedAppend(narrowPrecisionToFloat(0.349 - 0.349 * oneMinusAmount ));
105 matrix.uncheckedAppend(narrowPrecisionToFloat(0.686 + 0.314 * oneMinusAmount ));
106 matrix.uncheckedAppend(narrowPrecisionToFloat(0.168 - 0.168 * oneMinusAmount ));
107 endMatrixRow(matrix);
108
109 matrix.uncheckedAppend(narrowPrecisionToFloat(0.272 - 0.272 * oneMinusAmount ));
110 matrix.uncheckedAppend(narrowPrecisionToFloat(0.534 - 0.534 * oneMinusAmount ));
111 matrix.uncheckedAppend(narrowPrecisionToFloat(0.131 + 0.869 * oneMinusAmount ));
112 endMatrixRow(matrix);
113
114 lastMatrixRow(matrix);
115 return matrix;
116 }
117
118 } // namespace
119
60 FilterEffectBuilder::FilterEffectBuilder() 120 FilterEffectBuilder::FilterEffectBuilder()
61 { 121 {
62 } 122 }
63 123
64 FilterEffectBuilder::~FilterEffectBuilder() 124 FilterEffectBuilder::~FilterEffectBuilder()
65 { 125 {
66 } 126 }
67 127
68 DEFINE_TRACE(FilterEffectBuilder) 128 DEFINE_TRACE(FilterEffectBuilder)
69 { 129 {
(...skipping 12 matching lines...) Expand all
82 switch (filterOperation->type()) { 142 switch (filterOperation->type()) {
83 case FilterOperation::REFERENCE: { 143 case FilterOperation::REFERENCE: {
84 RefPtrWillBeRawPtr<Filter> referenceFilter = ReferenceFilterBuilder: :build(zoom, element, previousEffect.get(), toReferenceFilterOperation(*filterOp eration)); 144 RefPtrWillBeRawPtr<Filter> referenceFilter = ReferenceFilterBuilder: :build(zoom, element, previousEffect.get(), toReferenceFilterOperation(*filterOp eration));
85 if (referenceFilter) { 145 if (referenceFilter) {
86 effect = referenceFilter->lastEffect(); 146 effect = referenceFilter->lastEffect();
87 m_referenceFilters.append(referenceFilter); 147 m_referenceFilters.append(referenceFilter);
88 } 148 }
89 break; 149 break;
90 } 150 }
91 case FilterOperation::GRAYSCALE: { 151 case FilterOperation::GRAYSCALE: {
92 Vector<float> inputParameters; 152 Vector<float> inputParameters = grayscaleMatrix(toBasicColorMatrixFi lterOperation(filterOperation)->amount());
93 double oneMinusAmount = clampTo(1 - toBasicColorMatrixFilterOperatio n(filterOperation)->amount(), 0.0, 1.0);
94
95 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#g rayscaleEquivalent
96 // for information on parameters.
97
98 inputParameters.append(narrowPrecisionToFloat(0.2126 + 0.7874 * oneM inusAmount));
99 inputParameters.append(narrowPrecisionToFloat(0.7152 - 0.7152 * oneM inusAmount));
100 inputParameters.append(narrowPrecisionToFloat(0.0722 - 0.0722 * oneM inusAmount));
101 endMatrixRow(inputParameters);
102
103 inputParameters.append(narrowPrecisionToFloat(0.2126 - 0.2126 * oneM inusAmount));
104 inputParameters.append(narrowPrecisionToFloat(0.7152 + 0.2848 * oneM inusAmount));
105 inputParameters.append(narrowPrecisionToFloat(0.0722 - 0.0722 * oneM inusAmount));
106 endMatrixRow(inputParameters);
107
108 inputParameters.append(narrowPrecisionToFloat(0.2126 - 0.2126 * oneM inusAmount));
109 inputParameters.append(narrowPrecisionToFloat(0.7152 - 0.7152 * oneM inusAmount));
110 inputParameters.append(narrowPrecisionToFloat(0.0722 + 0.9278 * oneM inusAmount));
111 endMatrixRow(inputParameters);
112
113 lastMatrixRow(inputParameters);
114
115 effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYP E_MATRIX, inputParameters); 153 effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYP E_MATRIX, inputParameters);
116 break; 154 break;
117 } 155 }
118 case FilterOperation::SEPIA: { 156 case FilterOperation::SEPIA: {
119 Vector<float> inputParameters; 157 Vector<float> inputParameters = sepiaMatrix(toBasicColorMatrixFilter Operation(filterOperation)->amount());
120 double oneMinusAmount = clampTo(1 - toBasicColorMatrixFilterOperatio n(filterOperation)->amount(), 0.0, 1.0);
121
122 // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#s epiaEquivalent
123 // for information on parameters.
124
125 inputParameters.append(narrowPrecisionToFloat(0.393 + 0.607 * oneMin usAmount));
126 inputParameters.append(narrowPrecisionToFloat(0.769 - 0.769 * oneMin usAmount));
127 inputParameters.append(narrowPrecisionToFloat(0.189 - 0.189 * oneMin usAmount));
128 endMatrixRow(inputParameters);
129
130 inputParameters.append(narrowPrecisionToFloat(0.349 - 0.349 * oneMin usAmount));
131 inputParameters.append(narrowPrecisionToFloat(0.686 + 0.314 * oneMin usAmount));
132 inputParameters.append(narrowPrecisionToFloat(0.168 - 0.168 * oneMin usAmount));
133 endMatrixRow(inputParameters);
134
135 inputParameters.append(narrowPrecisionToFloat(0.272 - 0.272 * oneMin usAmount));
136 inputParameters.append(narrowPrecisionToFloat(0.534 - 0.534 * oneMin usAmount));
137 inputParameters.append(narrowPrecisionToFloat(0.131 + 0.869 * oneMin usAmount));
138 endMatrixRow(inputParameters);
139
140 lastMatrixRow(inputParameters);
141
142 effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYP E_MATRIX, inputParameters); 158 effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYP E_MATRIX, inputParameters);
143 break; 159 break;
144 } 160 }
145 case FilterOperation::SATURATE: { 161 case FilterOperation::SATURATE: {
146 Vector<float> inputParameters; 162 Vector<float> inputParameters;
147 inputParameters.append(narrowPrecisionToFloat(toBasicColorMatrixFilt erOperation(filterOperation)->amount())); 163 inputParameters.append(narrowPrecisionToFloat(toBasicColorMatrixFilt erOperation(filterOperation)->amount()));
148 effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYP E_SATURATE, inputParameters); 164 effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYP E_SATURATE, inputParameters);
149 break; 165 break;
150 } 166 }
151 case FilterOperation::HUE_ROTATE: { 167 case FilterOperation::HUE_ROTATE: {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 252
237 // If we didn't make any effects, tell our caller we are not valid 253 // If we didn't make any effects, tell our caller we are not valid
238 if (!m_lastEffect.get()) 254 if (!m_lastEffect.get())
239 return false; 255 return false;
240 256
241 return true; 257 return true;
242 } 258 }
243 259
244 } // namespace blink 260 } // namespace blink
245 261
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698