skia2/include
Mike Klein 48e08aa973 <ostream> -> <iosfwd>
<ostream> is one of the more expensive headers to include
and that's amplified by SkRefCnt.h's popularity.

We've been including <ostream> for sk_sp's operator<<.  That's only
used by Chromium and while we could just sprinkle in a bunch of .get()
calls and remove operator<<, when I started going through and actually
doing that I got the feeling I was making things pointlessly harder to
read and write, and wanted to find a way to make it actually work.

My next instinct was to template it without mentioning ostreams,

    template <typename OS, typename T>
    auto operator<<(OS& os, const sk_sp<T>& sp) -> decltype(os << sp.get()) {
        return os << sp.get();
    }

but that makes this operator<< ambiguous with some other templated operator<<
in GTest.  They got in first, so they win...

So ultimately, switch <ostream> to <iosfwd>.   Anyone using our
operator<<() presumably has <ostream> included already, and the #include
cost for <iosfwd> is small enough that I don't think we'll mind keeping
this around indefinitely.

To repro, look at before/after of -ftime-trace:

    ~/chromium/src/third_party/llvm-build/Release+Asserts/bin/clang++ -I. -Os -c src/core/SkCanvas.cpp -ftime-trace

I have tested locally that Chromium builds with this change.

Change-Id: I9decc2e65b5cc8fd07d8106a5eff81901aedd7d5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/237190
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2019-08-27 13:08:56 +00:00
..
android rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
atlastext rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
c Small fixes to C API. Add SK_API and fix function signature mismatch. 2019-06-07 01:29:23 +00:00
codec Hook up SkHeifCodec for ImageDecoder animation 2019-08-14 16:02:32 +00:00
config update SkUserConfig.h a bit 2019-05-20 17:52:22 +00:00
core <ostream> -> <iosfwd> 2019-08-27 13:08:56 +00:00
docs rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
effects Fix GMs broken during API porting 2019-08-05 14:53:45 +00:00
encode Revert "add runtime registration for encoders" 2019-05-15 22:02:39 +00:00
gpu Rename GrContextOption fReduceOpListSplitting to fReduceOpsTaskSplitting. 2019-08-23 18:43:27 +00:00
pathops rewrite includes to not need so much -Ifoo 2019-04-24 16:27:11 +00:00
ports Change GrCFResource to sk_cf_obj and move to include/ports. 2019-06-10 18:44:28 +00:00
private Track RemoteStrikes to send using pointers instead of descriptors 2019-08-26 22:10:20 +00:00
svg [svgcanvas] Add flag to suppress newlines and tabs in XML 2019-08-21 20:17:37 +00:00
third_party Roll skia/third_party/skcms 668026c511f3..853f66269c16 (2 commits) 2019-05-02 20:33:17 +00:00
utils track SkNoPixelsDevice's origin 2019-08-23 17:52:18 +00:00