// draw for base tile - called on TextureGeneration thread void TreeManager::drawCanvas(SkCanvas* canvas, bool drawLayers) { BaseLayerAndroid* paintingTree = 0; m_paintSwapLock.lock(); if (m_paintingTree) paintingTree = static_cast<BaseLayerAndroid*>(m_paintingTree); else paintingTree = static_cast<BaseLayerAndroid*>(m_drawingTree); SkSafeRef(paintingTree); m_paintSwapLock.unlock(); if (!paintingTree) return; paintingTree->drawCanvas(canvas); if (drawLayers && paintingTree->countChildren()) { // draw the layers onto the canvas as well Layer* layers = paintingTree->getChild(0); static_cast<LayerAndroid*>(layers)->drawCanvas(canvas); } SkSafeUnref(paintingTree); }
static bool nativeSerializeViewState(JNIEnv* env, jobject, jint jbaseLayer, jobject jstream, jbyteArray jstorage) { BaseLayerAndroid* baseLayer = (BaseLayerAndroid*) jbaseLayer; if (!baseLayer) return false; SkWStream *stream = CreateJavaOutputStreamAdaptor(env, jstream, jstorage); #if USE(ACCELERATED_COMPOSITING) // SAMSUNG CHANGE >> White flickering issue. // WAS:stream->write32(baseLayer->getBackgroundColor().rgb()); stream->write32(baseLayer->getBackgroundColor()); // SAMSUNG CHANGE << #else stream->write32(0); #endif SkPicture picture; PictureSet* content = baseLayer->content(); baseLayer->drawCanvas(picture.beginRecording(content->width(), content->height(), SkPicture::kUsePathBoundsForClip_RecordingFlag)); picture.endRecording(); if (!stream) return false; picture.serialize(stream); int childCount = baseLayer->countChildren(); XLOG("BaseLayer has %d child(ren)", childCount); stream->write32(childCount); for (int i = 0; i < childCount; i++) { LayerAndroid* layer = static_cast<LayerAndroid*>(baseLayer->getChild(i)); serializeLayer(layer, stream); } delete stream; return true; }