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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
diff --git a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
index dd7124407d0dcd09bc8ef195f751853fe70ed796..a706fa1dc9eaf4255d7233477a21e0b7b0650374 100644
--- a/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
+++ b/third_party/WebKit/Source/core/paint/FilterEffectBuilder.cpp
@@ -42,21 +42,81 @@
namespace blink {
-static inline void endMatrixRow(Vector<float>& parameters)
+namespace {
+
+inline void endMatrixRow(Vector<float>& matrix)
+{
+ matrix.uncheckedAppend(0);
+ matrix.uncheckedAppend(0);
+}
+
+inline void lastMatrixRow(Vector<float>& matrix)
{
- parameters.append(0);
- parameters.append(0);
+ matrix.uncheckedAppend(0);
+ matrix.uncheckedAppend(0);
+ matrix.uncheckedAppend(0);
+ matrix.uncheckedAppend(1);
+ matrix.uncheckedAppend(0);
}
-static inline void lastMatrixRow(Vector<float>& parameters)
+Vector<float> grayscaleMatrix(double amount)
{
- parameters.append(0);
- parameters.append(0);
- parameters.append(0);
- parameters.append(1);
- parameters.append(0);
+ double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0);
+
+ // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#grayscaleEquivalent
+ // for information on parameters.
+ Vector<float> matrix;
+ matrix.reserveInitialCapacity(20);
+
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 + 0.7874 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmount));
+ endMatrixRow(matrix);
+
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 + 0.2848 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmount));
+ endMatrixRow(matrix);
+
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.0722 + 0.9278 * oneMinusAmount));
+ endMatrixRow(matrix);
+
+ lastMatrixRow(matrix);
+ return matrix;
}
+Vector<float> sepiaMatrix(double amount)
+{
+ double oneMinusAmount = clampTo(1 - amount, 0.0, 1.0);
+
+ // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEquivalent
+ // for information on parameters.
+ Vector<float> matrix;
+ matrix.reserveInitialCapacity(20);
+
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.393 + 0.607 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.769 - 0.769 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.189 - 0.189 * oneMinusAmount));
+ endMatrixRow(matrix);
+
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.349 - 0.349 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.686 + 0.314 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.168 - 0.168 * oneMinusAmount));
+ endMatrixRow(matrix);
+
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.272 - 0.272 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.534 - 0.534 * oneMinusAmount));
+ matrix.uncheckedAppend(narrowPrecisionToFloat(0.131 + 0.869 * oneMinusAmount));
+ endMatrixRow(matrix);
+
+ lastMatrixRow(matrix);
+ return matrix;
+}
+
+} // namespace
+
FilterEffectBuilder::FilterEffectBuilder()
{
}
@@ -89,56 +149,12 @@ bool FilterEffectBuilder::build(Element* element, const FilterOperations& operat
break;
}
case FilterOperation::GRAYSCALE: {
- Vector<float> inputParameters;
- double oneMinusAmount = clampTo(1 - toBasicColorMatrixFilterOperation(filterOperation)->amount(), 0.0, 1.0);
-
- // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#grayscaleEquivalent
- // for information on parameters.
-
- inputParameters.append(narrowPrecisionToFloat(0.2126 + 0.7874 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmount));
- endMatrixRow(inputParameters);
-
- inputParameters.append(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.7152 + 0.2848 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.0722 - 0.0722 * oneMinusAmount));
- endMatrixRow(inputParameters);
-
- inputParameters.append(narrowPrecisionToFloat(0.2126 - 0.2126 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.7152 - 0.7152 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.0722 + 0.9278 * oneMinusAmount));
- endMatrixRow(inputParameters);
-
- lastMatrixRow(inputParameters);
-
+ Vector<float> inputParameters = grayscaleMatrix(toBasicColorMatrixFilterOperation(filterOperation)->amount());
effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYPE_MATRIX, inputParameters);
break;
}
case FilterOperation::SEPIA: {
- Vector<float> inputParameters;
- double oneMinusAmount = clampTo(1 - toBasicColorMatrixFilterOperation(filterOperation)->amount(), 0.0, 1.0);
-
- // See https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#sepiaEquivalent
- // for information on parameters.
-
- inputParameters.append(narrowPrecisionToFloat(0.393 + 0.607 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.769 - 0.769 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.189 - 0.189 * oneMinusAmount));
- endMatrixRow(inputParameters);
-
- inputParameters.append(narrowPrecisionToFloat(0.349 - 0.349 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.686 + 0.314 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.168 - 0.168 * oneMinusAmount));
- endMatrixRow(inputParameters);
-
- inputParameters.append(narrowPrecisionToFloat(0.272 - 0.272 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.534 - 0.534 * oneMinusAmount));
- inputParameters.append(narrowPrecisionToFloat(0.131 + 0.869 * oneMinusAmount));
- endMatrixRow(inputParameters);
-
- lastMatrixRow(inputParameters);
-
+ Vector<float> inputParameters = sepiaMatrix(toBasicColorMatrixFilterOperation(filterOperation)->amount());
effect = FEColorMatrix::create(parentFilter.get(), FECOLORMATRIX_TYPE_MATRIX, inputParameters);
break;
}
« 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