Chromium Code Reviews| Index: blimp/client/feature/compositor/client_image_serialization_processor.cc |
| diff --git a/blimp/client/feature/compositor/client_image_serialization_processor.cc b/blimp/client/feature/compositor/client_image_serialization_processor.cc |
| index df41181c8b694ccc586514edacdac2c17a194b0d..712e40dc6c7b671fa63a8f52f7a6906bafab8132 100644 |
| --- a/blimp/client/feature/compositor/client_image_serialization_processor.cc |
| +++ b/blimp/client/feature/compositor/client_image_serialization_processor.cc |
| @@ -4,27 +4,81 @@ |
| #include "blimp/client/feature/compositor/client_image_serialization_processor.h" |
| -#include "blimp/client/feature/compositor/blimp_image_decoder.h" |
| -#include "third_party/skia/include/core/SkPicture.h" |
| +#include <stddef.h> |
| +#include <string> |
| +#include <vector> |
| -class SkPixelSerializer; |
| +#include "base/logging.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/sha1.h" |
| +#include "base/strings/string_number_conversions.h" |
| +#include "blimp/client/feature/compositor/blimp_image_decoder.h" |
| +#include "blimp/common/blob_cache/blob_cache.h" |
| +#include "blimp/common/blob_cache/id_util.h" |
| +#include "blimp/common/proto/blob_cache.pb.h" |
| +#include "blimp/net/blob_channel/blob_channel_receiver.h" |
| namespace blimp { |
| namespace client { |
| -ClientImageSerializationProcessor::ClientImageSerializationProcessor() { |
| - pixel_deserializer_ = &BlimpImageDecoder; |
| -} |
| +ClientImageSerializationProcessor::ClientImageSerializationProcessor() {} |
| ClientImageSerializationProcessor::~ClientImageSerializationProcessor() {} |
| +ClientImageSerializationProcessor* |
| +ClientImageSerializationProcessor::GetInstance() { |
| + return base::Singleton<ClientImageSerializationProcessor>::get(); |
| +} |
| + |
| +// static |
| +bool ClientImageSerializationProcessor::InstallPixelRefProc(const void* input, |
| + size_t input_size, |
| + SkBitmap* bitmap) { |
| + DCHECK(input); |
| + DCHECK(bitmap); |
| + |
| + return ClientImageSerializationProcessor::GetInstance()->GetAndDecodeBlob( |
| + input, input_size, bitmap); |
| +} |
| + |
| +bool ClientImageSerializationProcessor::GetAndDecodeBlob(const void* input, |
| + size_t input_size, |
| + SkBitmap* bitmap) { |
| + BlobCacheImageMetadata parsed_metadata; |
| + if (!parsed_metadata.ParseFromArray(input, input_size)) { |
| + LOG(WARNING) << "Couldn't parse blob metadata structure."; |
|
Wez
2016/05/21 01:08:03
This seems like an error, not a warning? Presumabl
Kevin M
2016/05/27 22:35:29
Done.
|
| + return false; |
| + } |
| + if (!IsValidBlobId(parsed_metadata.id())) { |
| + DLOG(ERROR) << "Image payload is not a valid blob ID."; |
|
Wez
2016/05/21 01:08:03
Why only DLOG(ERROR) - you are LOG(WARNING)ing abo
Kevin M
2016/05/27 22:35:29
Done.
|
| + return false; |
| + } |
| + |
| + // Get the image blob synchronously. |
| + // TODO(kmarshall): Add support for asynchronous Get() completion after Skia |
| + // supports image replacement. |
| + BlobDataPtr blob = blob_receiver_->Get(parsed_metadata.id()); |
| + if (!blob) { |
| + DLOG(WARNING) << "No blob found with ID: " |
| + << BlobIdToString(parsed_metadata.id()); |
|
Wez
2016/05/21 01:08:03
While we have synchronous fetch isn't this also a
Kevin M
2016/05/27 22:35:29
Done.
|
| + return false; |
| + } |
| + |
| + DVLOG(1) << "GetAndDecodeBlob(" << BlobIdToString(parsed_metadata.id()) |
| + << ")"; |
| + |
| + return BlimpImageDecoder(reinterpret_cast<const void*>(&blob->data[0]), |
| + blob->data.size(), bitmap); |
| +} |
| + |
| SkPixelSerializer* ClientImageSerializationProcessor::GetPixelSerializer() { |
| + NOTREACHED(); |
| return nullptr; |
| } |
| SkPicture::InstallPixelRefProc |
| ClientImageSerializationProcessor::GetPixelDeserializer() { |
| - return pixel_deserializer_; |
| + return &ClientImageSerializationProcessor::InstallPixelRefProc; |
| } |
| } // namespace client |