// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "sky/shell/gpu/picture_serializer.h"

#include "third_party/skia/include/core/SkData.h"
#include "third_party/skia/include/core/SkPixelSerializer.h"
#include "third_party/skia/include/core/SkStream.h"
#include "ui/gfx/codec/png_codec.h"

namespace sky {

class PngPixelSerializer : public SkPixelSerializer {
 public:
  bool onUseEncodedData(const void*, size_t) override { return true; }
  SkData* onEncodePixels(const SkImageInfo& info, const void* pixels,
      size_t row_bytes) override {
    std::vector<unsigned char> data;

    SkBitmap bm;
    if (!bm.installPixels(info, const_cast<void*>(pixels), row_bytes))
      return nullptr;
    if (!gfx::PNGCodec::EncodeBGRASkBitmap(bm, false, &data))
      return nullptr;
    return SkData::NewWithCopy(&data.front(), data.size());
  }
};

void SerializePicture(const char* file_name, SkPicture* picture) {
  SkFILEWStream stream(file_name);
  PngPixelSerializer serializer;
  picture->serialize(&stream, &serializer);
}

}  // namespace sky
