add explicit API to know if the writebuffer is using its external storage

To help with https://skia-review.googlesource.com/c/skia/+/114262

Bug: skia:
Change-Id: I83fcccdec0dbaef28d0e557ea6fb9bd0ed59ed44
Reviewed-on: https://skia-review.googlesource.com/114284
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp
index 2543870..da79739 100644
--- a/tests/SerializationTest.cpp
+++ b/tests/SerializationTest.cpp
@@ -637,3 +637,32 @@
     TestAnnotationCanvas canvas(reporter, recs, SK_ARRAY_COUNT(recs));
     canvas.drawPicture(pict1);
 }
+
+DEF_TEST(WriteBuffer_storage, reporter) {
+    enum {
+        kSize = 32
+    };
+    int32_t storage[kSize/4];
+    char src[kSize];
+    sk_bzero(src, kSize);
+
+    SkBinaryWriteBuffer writer(storage, kSize);
+    REPORTER_ASSERT(reporter, writer.usingInitialStorage());
+    REPORTER_ASSERT(reporter, writer.bytesWritten() == 0);
+    writer.write(src, kSize - 4);
+    REPORTER_ASSERT(reporter, writer.usingInitialStorage());
+    REPORTER_ASSERT(reporter, writer.bytesWritten() == kSize - 4);
+    writer.writeInt(0);
+    REPORTER_ASSERT(reporter, writer.usingInitialStorage());
+    REPORTER_ASSERT(reporter, writer.bytesWritten() == kSize);
+
+    writer.reset(storage, kSize-4);
+    REPORTER_ASSERT(reporter, writer.usingInitialStorage());
+    REPORTER_ASSERT(reporter, writer.bytesWritten() == 0);
+    writer.write(src, kSize - 4);
+    REPORTER_ASSERT(reporter, writer.usingInitialStorage());
+    REPORTER_ASSERT(reporter, writer.bytesWritten() == kSize - 4);
+    writer.writeInt(0);
+    REPORTER_ASSERT(reporter, !writer.usingInitialStorage());   // this is the change
+    REPORTER_ASSERT(reporter, writer.bytesWritten() == kSize);
+}