add cross-process option to gpipe
add unittests for reader32 and writer32
git-svn-id: http://skia.googlecode.com/svn/trunk@1397 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
index 5e6c632..c72aa57 100644
--- a/src/pipe/SkGPipeRead.cpp
+++ b/src/pipe/SkGPipeRead.cpp
@@ -70,7 +70,10 @@
SkGPipeState();
~SkGPipeState();
- void setReader(SkFlattenableReadBuffer* reader) { fReader = reader; }
+ void setReader(SkFlattenableReadBuffer* reader) {
+ fReader = reader;
+ fReader->setFactoryPlayback(fFactoryArray.begin(), fFactoryArray.count());
+ }
const SkPaint& paint() const { return fPaint; }
SkPaint* editPaint() { return &fPaint; }
@@ -83,11 +86,21 @@
}
void defFlattenable(PaintFlats pf, unsigned index) {
+ SkASSERT(index == fFlatArray.count() + 1);
SkFlattenable* obj = fReader->readFlattenable();
*fFlatArray.append() = obj;
- SkASSERT(index == fFlatArray.count());
}
+ void nameFlattenable(PaintFlats pf, unsigned index) {
+ SkASSERT(index == fFactoryArray.count() + 1);
+ const char* name = fReader->readString();
+ SkFlattenable::Factory fact = SkFlattenable::NameToFactory(name);
+ *fFactoryArray.append() = fact;
+
+ // update this each time we grow the array
+ fReader->setFactoryPlayback(fFactoryArray.begin(), fFactoryArray.count());
+ }
+
void addTypeface() {
size_t size = fReader->readU32();
const void* data = fReader->skip(SkAlign4(size));
@@ -104,6 +117,7 @@
SkPaint fPaint;
SkTDArray<SkFlattenable*> fFlatArray;
SkTDArray<SkTypeface*> fTypefaces;
+ SkTDArray<SkFlattenable::Factory> fFactoryArray;
};
///////////////////////////////////////////////////////////////////////////////
@@ -430,6 +444,13 @@
state->defFlattenable(pf, index);
}
+static void name_PaintFlat_rp(SkCanvas*, SkReader32*, uint32_t op32,
+ SkGPipeState* state) {
+ PaintFlats pf = (PaintFlats)DrawOp_unpackFlags(op32);
+ unsigned index = DrawOp_unpackData(op32);
+ state->nameFlattenable(pf, index);
+}
+
///////////////////////////////////////////////////////////////////////////////
static void skip_rp(SkCanvas*, SkReader32* reader, uint32_t op32, SkGPipeState*) {
@@ -476,6 +497,7 @@
paintOp_rp,
def_Typeface_rp,
def_PaintFlat_rp,
+ name_PaintFlat_rp,
done_rp
};