diff options
author | mtklein <mtklein@chromium.org> | 2015-08-12 10:23:37 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-12 10:23:37 -0700 |
commit | b07bee3121680b53b98b780ac08d14d374dd4c6f (patch) | |
tree | 2435afdba0713eb7b7325bbb334c731abbd8fa81 /src/opts/SkXfermode_opts.h | |
parent | 58d890bd45a201477ec6c4ba0ae61c574b4e5aef (diff) |
Refactor to put SkXfermode_opts inside SK_OPTS_NS.
Without this refactor I was getting warnings previously about having code
inside namespace SK_OPTS_NS (e.g. namespace sse2, namespace neon) referring to
code inside an anonymous namespace (Sk4px, SkPMFloat, Sk4f, etc) [1].
That low-level code was in an anonymous namespace to allow multiple independent
copies of its methods to be instantiated without the linker getting confused /
offended about violating the One Definition Rule. This was only happening in
Debug mode where the methods were not being inlined.
To fix this all, I've force-inlined the methods of the low-level code and
removed the anonymous namespace.
BUG=skia:4117
[1] Here is what those errors looked like:
In file included from ../../../../src/core/SkOpts.cpp:18:0:
../../../../src/opts/SkXfermode_opts.h:193:7: error: 'portable::Sk4pxXfermode' has a field 'portable::Sk4pxXfermode::fProc4' whose type uses the anonymous namespace [-Werror]
class Sk4pxXfermode : public SkProcCoeffXfermode {
^
../../../../src/opts/SkXfermode_opts.h:193:7: error: 'portable::Sk4pxXfermode' has a field 'portable::Sk4pxXfermode::fAAProc4' whose type uses the anonymous namespace [-Werror]
../../../../src/opts/SkXfermode_opts.h:235:7: error: 'portable::SkPMFloatXfermode' has a field 'portable::SkPMFloatXfermode::fProcF' whose type uses the anonymous namespace [-Werror]
class SkPMFloatXfermode : public SkProcCoeffXfermode {
^
cc1plus: all warnings being treated as errors
Review URL: https://codereview.chromium.org/1286093004
Diffstat (limited to 'src/opts/SkXfermode_opts.h')
-rw-r--r-- | src/opts/SkXfermode_opts.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/opts/SkXfermode_opts.h b/src/opts/SkXfermode_opts.h index e5ca257a28..5394e636e7 100644 --- a/src/opts/SkXfermode_opts.h +++ b/src/opts/SkXfermode_opts.h @@ -12,7 +12,7 @@ #include "SkPMFloat.h" #include "SkXfermode_proccoeff.h" -namespace /* TODO: SK_OPTS_NS */ { +namespace SK_OPTS_NS { // Most xfermodes can be done most efficiently 4 pixels at a time in 8 or 16-bit fixed point. #define XFERMODE(Name) static Sk4px SK_VECTORCALL Name(Sk4px s, Sk4px d) @@ -274,7 +274,7 @@ private: typedef SkProcCoeffXfermode INHERITED; }; -static SkXfermode* SkCreate4pxXfermode(const ProcCoeff& rec, SkXfermode::Mode mode) { +static SkXfermode* create_xfermode(const ProcCoeff& rec, SkXfermode::Mode mode) { switch (mode) { #define CASE(Mode) case SkXfermode::k##Mode##_Mode: \ return SkNEW_ARGS(Sk4pxXfermode, (rec, mode, &Mode, &xfer_aa<Mode>)) |