提交 1f9858cb 编写于 作者: A Adam Barth

Merge pull request #2274 from abarth/rm_wtf_string

Remove integration between tonic and WTFString
......@@ -170,8 +170,7 @@ void ScheduleMicrotask(Dart_NativeArguments args) {
}
void GetBaseURLString(Dart_NativeArguments args) {
String url = DOMDartState::Current()->url();
Dart_SetReturnValue(args, StringToDart(DartState::Current(), url));
Dart_SetReturnValue(args, ToDart(DOMDartState::Current()->url()));
}
void Timer_create(Dart_NativeArguments args) {
......
......@@ -242,7 +242,7 @@ Dart_Handle DartJni::jni_float_type() {
}
void JniMethodArgs::Convert(JNIEnv* env,
const Vector<Dart_Handle>& dart_args,
const std::vector<Dart_Handle>& dart_args,
Dart_Handle* exception) {
jvalues_.reserve(dart_args.size());
......
......@@ -42,7 +42,7 @@ class DartJni {
class JniMethodArgs {
public:
void Convert(JNIEnv* env,
const Vector<Dart_Handle>& dart_args,
const std::vector<Dart_Handle>& dart_args,
Dart_Handle* exception);
jvalue* jvalues() { return jvalues_.data(); }
......
......@@ -119,8 +119,8 @@ fail:
return 0;
}
PassRefPtr<JniObject> JniClass::NewObject(jmethodID methodId,
const Vector<Dart_Handle>& args) {
PassRefPtr<JniObject> JniClass::NewObject(
jmethodID methodId, const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -430,7 +430,7 @@ fail:
}
PassRefPtr<JniObject> JniClass::CallStaticObjectMethod(
jmethodID methodId, const Vector<Dart_Handle>& args) {
jmethodID methodId, const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -452,7 +452,7 @@ fail:
}
bool JniClass::CallStaticBooleanMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -474,7 +474,7 @@ fail:
}
int64_t JniClass::CallStaticByteMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -496,7 +496,7 @@ fail:
}
int64_t JniClass::CallStaticCharMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -518,7 +518,7 @@ fail:
}
int64_t JniClass::CallStaticShortMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -540,7 +540,7 @@ fail:
}
int64_t JniClass::CallStaticIntMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -562,7 +562,7 @@ fail:
}
int64_t JniClass::CallStaticLongMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -584,7 +584,7 @@ fail:
}
double JniClass::CallStaticFloatMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -606,7 +606,7 @@ fail:
}
double JniClass::CallStaticDoubleMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -628,7 +628,7 @@ fail:
}
void JniClass::CallStaticVoidMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......
......@@ -10,6 +10,7 @@
#include "base/android/jni_android.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
namespace blink {
......@@ -31,7 +32,7 @@ class JniClass : public RefCounted<JniClass>, public DartWrappable {
intptr_t GetStaticMethodId(const char* name, const char* sig);
PassRefPtr<JniObject> NewObject(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
PassRefPtr<JniObject> GetStaticObjectField(jfieldID fieldId);
bool GetStaticBooleanField(jfieldID fieldId);
......@@ -53,26 +54,26 @@ class JniClass : public RefCounted<JniClass>, public DartWrappable {
void SetStaticFloatField(jfieldID fieldId, double value);
void SetStaticDoubleField(jfieldID fieldId, double value);
PassRefPtr<JniObject> CallStaticObjectMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
PassRefPtr<JniObject> CallStaticObjectMethod(
jmethodID methodId, const std::vector<Dart_Handle>& args);
bool CallStaticBooleanMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
int64_t CallStaticByteMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
int64_t CallStaticCharMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
int64_t CallStaticShortMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
int64_t CallStaticIntMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
int64_t CallStaticLongMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
double CallStaticFloatMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
double CallStaticDoubleMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
void CallStaticVoidMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
private:
JniClass(JNIEnv* env, jclass clazz);
......
......@@ -56,7 +56,7 @@ fail:
PassRefPtr<JniObject> JniObject::CallObjectMethod(
jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -78,7 +78,7 @@ fail:
}
bool JniObject::CallBooleanMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -100,7 +100,7 @@ fail:
}
int64_t JniObject::CallIntMethod(jmethodID methodId,
const Vector<Dart_Handle>& args) {
const std::vector<Dart_Handle>& args) {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -133,7 +133,7 @@ jstring JniString::java_string() {
return static_cast<jstring>(java_object());
}
String JniString::GetText() {
std::string JniString::GetText() {
Dart_Handle exception = nullptr;
{
ENTER_JNI();
......@@ -144,7 +144,7 @@ String JniString::GetText() {
const jchar* chars = env->GetStringChars(java_string(), NULL);
if (CheckJniException(env, &exception)) goto fail;
String result(chars, length);
std::string result(reinterpret_cast<const char*>(chars), length);
env->ReleaseStringChars(java_string(), chars);
return result;
......@@ -152,7 +152,7 @@ String JniString::GetText() {
fail:
Dart_ThrowException(exception);
ASSERT_NOT_REACHED();
return String();
return std::string();
}
} // namespace blink
......@@ -10,6 +10,7 @@
#include "base/android/jni_android.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
namespace blink {
......@@ -27,11 +28,11 @@ class JniObject : public RefCounted<JniObject>, public DartWrappable {
int64_t GetIntField(jfieldID fieldId);
PassRefPtr<JniObject> CallObjectMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
bool CallBooleanMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
int64_t CallIntMethod(jmethodID methodId,
const Vector<Dart_Handle>& args);
const std::vector<Dart_Handle>& args);
protected:
JniObject(JNIEnv* env, jobject object);
......@@ -47,7 +48,7 @@ class JniString : public JniObject {
public:
~JniString() override;
String GetText();
std::string GetText();
private:
JniString(JNIEnv* env, jstring string);
......
......@@ -18,7 +18,6 @@
#include "sky/engine/core/painting/Point.h"
#include "sky/engine/core/painting/Rect.h"
#include "sky/engine/core/painting/RRect.h"
#include "sky/engine/core/painting/Size.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/tonic/float64_list.h"
#include "sky/engine/wtf/PassRefPtr.h"
......
......@@ -60,8 +60,6 @@ sky_core_files = [
"painting/RSTransform.h",
"painting/Shader.cpp",
"painting/Shader.h",
"painting/Size.cpp",
"painting/Size.h",
"painting/TransferMode.h",
"rendering/BidiRun.h",
"rendering/BidiRunForLine.cpp",
......
......@@ -279,35 +279,35 @@ void Canvas::drawPicture(Picture* picture)
}
void Canvas::drawVertices(SkCanvas::VertexMode vertexMode,
const Vector<Point>& vertices,
const Vector<Point>& textureCoordinates,
const Vector<CanvasColor>& colors,
const std::vector<Point>& vertices,
const std::vector<Point>& textureCoordinates,
const std::vector<CanvasColor>& colors,
TransferMode transferMode,
const Vector<int>& indices,
const std::vector<int>& indices,
const Paint& paint)
{
if (!m_canvas)
return;
Vector<SkPoint> skVertices;
skVertices.reserveInitialCapacity(vertices.size());
std::vector<SkPoint> skVertices;
skVertices.reserve(vertices.size());
for (const Point& point : vertices)
skVertices.append(point.sk_point);
skVertices.push_back(point.sk_point);
Vector<SkPoint> skTextureCoordinates;
skVertices.reserveInitialCapacity(textureCoordinates.size());
std::vector<SkPoint> skTextureCoordinates;
skVertices.reserve(textureCoordinates.size());
for (const Point& point : textureCoordinates)
skTextureCoordinates.append(point.sk_point);
skTextureCoordinates.push_back(point.sk_point);
Vector<SkColor> skColors;
skColors.reserveInitialCapacity(colors.size());
std::vector<SkColor> skColors;
skColors.reserve(colors.size());
for (const CanvasColor& color : colors)
skColors.append(color);
skColors.push_back(color);
Vector<uint16_t> skIndices;
skIndices.reserveInitialCapacity(indices.size());
std::vector<uint16_t> skIndices;
skIndices.reserve(indices.size());
for (uint16_t i : indices)
skIndices.append(i);
skIndices.push_back(i);
RefPtr<SkXfermode> transferModePtr = adoptRef(SkXfermode::Create(transferMode));
......@@ -315,18 +315,18 @@ void Canvas::drawVertices(SkCanvas::VertexMode vertexMode,
vertexMode,
skVertices.size(),
skVertices.data(),
skTextureCoordinates.isEmpty() ? nullptr : skTextureCoordinates.data(),
skColors.isEmpty() ? nullptr : skColors.data(),
skTextureCoordinates.empty() ? nullptr : skTextureCoordinates.data(),
skColors.empty() ? nullptr : skColors.data(),
transferModePtr.get(),
skIndices.isEmpty() ? nullptr : skIndices.data(),
skIndices.empty() ? nullptr : skIndices.data(),
skIndices.size(),
*paint.paint()
);
}
void Canvas::drawAtlas(CanvasImage* atlas,
const Vector<RSTransform>& transforms, const Vector<Rect>& rects,
const Vector<CanvasColor>& colors, TransferMode mode,
const std::vector<RSTransform>& transforms, const std::vector<Rect>& rects,
const std::vector<CanvasColor>& colors, TransferMode mode,
const Rect& cullRect, const Paint& paint)
{
if (!m_canvas)
......@@ -334,26 +334,26 @@ void Canvas::drawAtlas(CanvasImage* atlas,
RefPtr<SkImage> skImage = atlas->image();
Vector<SkRSXform> skXForms;
skXForms.reserveInitialCapacity(transforms.size());
std::vector<SkRSXform> skXForms;
skXForms.reserve(transforms.size());
for (const RSTransform& transform : transforms)
skXForms.append(transform.sk_xform);
skXForms.push_back(transform.sk_xform);
Vector<SkRect> skRects;
skRects.reserveInitialCapacity(rects.size());
std::vector<SkRect> skRects;
skRects.reserve(rects.size());
for (const Rect& rect : rects)
skRects.append(rect.sk_rect);
skRects.push_back(rect.sk_rect);
Vector<SkColor> skColors;
skColors.reserveInitialCapacity(colors.size());
std::vector<SkColor> skColors;
skColors.reserve(colors.size());
for (const CanvasColor& color : colors)
skColors.append(color);
skColors.push_back(color);
m_canvas->drawAtlas(
skImage.get(),
skXForms.data(),
skRects.data(),
skColors.isEmpty() ? nullptr : skColors.data(),
skColors.empty() ? nullptr : skColors.data(),
skXForms.size(),
mode,
cullRect.is_null ? nullptr : &cullRect.sk_rect,
......
......@@ -14,7 +14,6 @@
#include "sky/engine/core/painting/Point.h"
#include "sky/engine/core/painting/RRect.h"
#include "sky/engine/core/painting/Rect.h"
#include "sky/engine/core/painting/Size.h"
#include "sky/engine/core/painting/RSTransform.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/tonic/float64_list.h"
......@@ -69,16 +68,18 @@ public:
void drawPicture(Picture* picture);
void drawVertices(SkCanvas::VertexMode vertexMode,
const Vector<Point>& vertices,
const Vector<Point>& textureCoordinates,
const Vector<CanvasColor>& colors,
const std::vector<Point>& vertices,
const std::vector<Point>& textureCoordinates,
const std::vector<CanvasColor>& colors,
TransferMode transferMode,
const Vector<int>& indices,
const std::vector<int>& indices,
const Paint& paint);
void drawAtlas(CanvasImage* atlas,
const Vector<RSTransform>& transforms, const Vector<Rect>& rects,
const Vector<CanvasColor>& colors, TransferMode mode,
const std::vector<RSTransform>& transforms,
const std::vector<Rect>& rects,
const std::vector<CanvasColor>& colors,
TransferMode mode,
const Rect& cullRect, const Paint& paint);
SkCanvas* skCanvas() { return m_canvas; }
......
......@@ -27,11 +27,6 @@ struct DartConverter<CanvasColor> {
static CanvasColor FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static CanvasColor FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
static void SetReturnValue(Dart_NativeArguments args, CanvasColor val);
};
......
......@@ -36,9 +36,9 @@ PassRefPtr<CanvasGradient> CanvasGradient::create() {
return adoptRef(new CanvasGradient());
}
void CanvasGradient::initLinear(const Vector<Point>& end_points,
const Vector<CanvasColor>& colors,
const Vector<float>& color_stops,
void CanvasGradient::initLinear(const std::vector<Point>& end_points,
const std::vector<CanvasColor>& colors,
const std::vector<float>& color_stops,
SkShader::TileMode tile_mode) {
ASSERT(end_points.size() == 2);
ASSERT(colors.size() == color_stops.size() || color_stops.data() == nullptr);
......@@ -46,10 +46,10 @@ void CanvasGradient::initLinear(const Vector<Point>& end_points,
for (int i = 0; i < 2; ++i)
sk_end_points[i] = end_points[i].sk_point;
Vector<SkColor> sk_colors;
sk_colors.reserveInitialCapacity(colors.size());
std::vector<SkColor> sk_colors;
sk_colors.reserve(colors.size());
for (const CanvasColor& color : colors)
sk_colors.append(color);
sk_colors.push_back(color);
SkShader* shader = SkGradientShader::CreateLinear(
sk_end_points, sk_colors.data(), color_stops.data(), sk_colors.size(),
......@@ -59,15 +59,15 @@ void CanvasGradient::initLinear(const Vector<Point>& end_points,
void CanvasGradient::initRadial(const Point& center,
double radius,
const Vector<CanvasColor>& colors,
const Vector<float>& color_stops,
const std::vector<CanvasColor>& colors,
const std::vector<float>& color_stops,
SkShader::TileMode tile_mode) {
ASSERT(colors.size() == color_stops.size() || color_stops.data() == nullptr);
Vector<SkColor> sk_colors;
sk_colors.reserveInitialCapacity(colors.size());
std::vector<SkColor> sk_colors;
sk_colors.reserve(colors.size());
for (const CanvasColor& color : colors)
sk_colors.append(color);
sk_colors.push_back(color);
SkShader* shader = SkGradientShader::CreateRadial(
center.sk_point, radius, sk_colors.data(), color_stops.data(),
......
......@@ -25,15 +25,15 @@ class CanvasGradient : public Shader {
~CanvasGradient() override;
static PassRefPtr<CanvasGradient> create();
void initLinear(const Vector<Point>& end_points,
const Vector<CanvasColor>& colors,
const Vector<float>& color_stops,
void initLinear(const std::vector<Point>& end_points,
const std::vector<CanvasColor>& colors,
const std::vector<float>& color_stops,
SkShader::TileMode tile_mode);
void initRadial(const Point& center,
double radius,
const Vector<CanvasColor>& colors,
const Vector<float>& color_stops,
const std::vector<CanvasColor>& colors,
const std::vector<float>& color_stops,
SkShader::TileMode tile_mode);
static void RegisterNatives(DartLibraryNatives* natives);
......
......@@ -7,6 +7,7 @@
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
#include "third_party/skia/include/core/SkImage.h"
namespace blink {
......
......@@ -9,6 +9,7 @@
#include "sky/engine/core/painting/Offset.h"
#include "sky/engine/core/painting/TransferMode.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/RefCounted.h"
#include "third_party/skia/include/core/SkPoint.h"
#include "third_party/skia/include/effects/SkLayerDrawLooper.h"
......
......@@ -23,11 +23,6 @@ struct DartConverter<Offset> {
static Offset FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Offset FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
......@@ -36,11 +36,6 @@ struct DartConverter<Paint> {
static Paint FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Paint FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
class StrokeCap {};
......
......@@ -23,11 +23,6 @@ struct DartConverter<Point> {
static Point FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Point FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
......@@ -23,11 +23,6 @@ struct DartConverter<RRect> {
static RRect FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static RRect FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
......@@ -45,12 +45,4 @@ RSTransform DartConverter<RSTransform>::FromDart(Dart_Handle dart_xform) {
return result;
}
RSTransform DartConverter<RSTransform>::FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
Dart_Handle dart_xform = Dart_GetNativeArgument(args, index);
DCHECK(!LogIfError(dart_xform));
return FromDart(dart_xform);
}
} // namespace blink
......@@ -22,9 +22,6 @@ class RSTransform {
template <>
struct DartConverter<RSTransform> {
static RSTransform FromDart(Dart_Handle handle);
static RSTransform FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
};
} // namespace blink
......
......@@ -23,11 +23,6 @@ struct DartConverter<Rect> {
static Rect FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Rect FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
// 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/engine/core/painting/Size.h"
#include "sky/engine/core/script/dom_dart_state.h"
#include "sky/engine/tonic/dart_error.h"
#include "base/logging.h"
namespace blink {
// Convert handle.x,y ==> SkSize.
Size DartConverter<Size>::FromDart(Dart_Handle handle) {
DCHECK(!LogIfError(handle));
Dart_Handle dx_value =
Dart_GetField(handle, DOMDartState::Current()->dx_handle());
Dart_Handle dy_value =
Dart_GetField(handle, DOMDartState::Current()->dy_handle());
double dx = 0.0, dy = 0.0;
Dart_Handle err = Dart_DoubleValue(dx_value, &dx);
DCHECK(!LogIfError(err));
err = Dart_DoubleValue(dy_value, &dy);
DCHECK(!LogIfError(err));
Size result;
result.sk_size.set(dx, dy);
result.is_null = false;
return result;
}
Size DartConverter<Size>::FromArgumentsWithNullCheck(
Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromDart(Dart_GetNativeArgument(args, index));
}
} // namespace blink
// 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.
#ifndef SKY_ENGINE_CORE_PAINTING_SIZE_H_
#define SKY_ENGINE_CORE_PAINTING_SIZE_H_
#include "dart/runtime/include/dart_api.h"
#include "sky/engine/tonic/dart_converter.h"
#include "third_party/skia/include/core/SkSize.h"
namespace blink {
// Very simple wrapper for SkSize to add a null state.
class Size {
public:
SkSize sk_size;
bool is_null;
};
template <>
struct DartConverter<Size> {
static Size FromDart(Dart_Handle handle);
static Size FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
};
} // namespace blink
#endif // SKY_ENGINE_CORE_PAINTING_SIZE_H_
......@@ -35,17 +35,17 @@ void DecodeImage(scoped_ptr<DartPersistentValue> callback,
// decoder can be null if the buffer was empty and we couldn't even guess
// what type of image to decode.
if (!decoder) {
DartInvokeAppClosure(callback->value(), {Dart_Null()});
DartInvoke(callback->value(), {Dart_Null()});
return;
}
decoder->setData(buffer.get(), true);
if (decoder->failed() || decoder->frameCount() == 0) {
DartInvokeAppClosure(callback->value(), {Dart_Null()});
DartInvoke(callback->value(), {Dart_Null()});
return;
}
ImageFrame* imageFrame = decoder->frameBufferAtIndex(0);
if (decoder->failed()) {
DartInvokeAppClosure(callback->value(), {Dart_Null()});
DartInvoke(callback->value(), {Dart_Null()});
return;
}
......@@ -54,7 +54,7 @@ void DecodeImage(scoped_ptr<DartPersistentValue> callback,
SkImage::NewFromBitmap(imageFrame->getSkBitmap()));
resultImage->setImage(skImage.release());
DartInvokeAppClosure(callback->value(), {ToDart(resultImage)});
DartInvoke(callback->value(), {ToDart(resultImage)});
}
......@@ -62,7 +62,7 @@ void DecodeImageFromDataPipe(Dart_NativeArguments args) {
Dart_Handle exception = nullptr;
mojo::ScopedDataPipeConsumerHandle consumer =
DartConverter<mojo::ScopedDataPipeConsumerHandle>::FromArgumentsWithNullCheck(
DartConverter<mojo::ScopedDataPipeConsumerHandle>::FromArguments(
args, 0, exception);
if (exception) {
Dart_ThrowException(exception);
......@@ -84,8 +84,7 @@ void DecodeImageFromDataPipe(Dart_NativeArguments args) {
void DecodeImageFromList(Dart_NativeArguments args) {
Dart_Handle exception = nullptr;
Uint8List list = DartConverter<Uint8List>::FromArgumentsWithNullCheck(
args, 0, exception);
Uint8List list = DartConverter<Uint8List>::FromArguments(args, 0, exception);
if (exception) {
Dart_ThrowException(exception);
return;
......
......@@ -78,13 +78,13 @@ DartController::~DartController() {
}
}
void DartController::DidLoadMainLibrary(String name) {
void DartController::DidLoadMainLibrary(std::string name) {
DCHECK(Dart_CurrentIsolate() == dart_state()->isolate());
DartApiScope dart_api_scope;
CHECK(!LogIfError(Dart_FinalizeLoading(true)));
Dart_Handle library = Dart_LookupLibrary(StringToDart(dart_state(), name));
Dart_Handle library = Dart_LookupLibrary(ToDart(name));
if (LogIfError(library))
exit(1);
if (DartInvokeField(library, "main", {}))
......@@ -127,7 +127,7 @@ void DartController::RunFromSnapshotBuffer(const uint8_t* buffer, size_t size) {
DartInvokeField(library, "main", {});
}
void DartController::RunFromLibrary(const String& name,
void DartController::RunFromLibrary(const std::string& name,
DartLibraryProvider* library_provider) {
DartState::Scope scope(dart_state());
CreateEmptyRootLibraryIfNeeded();
......@@ -136,7 +136,7 @@ void DartController::RunFromLibrary(const String& name,
loader.set_library_provider(library_provider);
DartDependencyCatcher dependency_catcher(loader);
loader.LoadLibrary(name.toUTF8());
loader.LoadLibrary(name);
loader.WaitForDependencies(dependency_catcher.dependencies(),
base::Bind(&DartController::DidLoadMainLibrary,
weak_factory_.GetWeakPtr(), name));
......@@ -146,7 +146,7 @@ void DartController::CreateIsolateFor(std::unique_ptr<DOMDartState> state) {
char* error = nullptr;
dom_dart_state_ = std::move(state);
Dart_Isolate isolate = Dart_CreateIsolate(
dom_dart_state_->url().utf8().data(), "main",
dom_dart_state_->url().c_str(), "main",
reinterpret_cast<uint8_t*>(DART_SYMBOL(kDartIsolateSnapshotBuffer)),
nullptr, static_cast<DartState*>(dom_dart_state_.get()), &error);
Dart_SetMessageNotifyCallback(MessageNotifyCallback);
......
......@@ -31,7 +31,7 @@ class DartController {
static void InitVM();
void RunFromLibrary(const String& name,
void RunFromLibrary(const std::string& name,
DartLibraryProvider* library_provider);
void RunFromPrecompiledSnapshot();
void RunFromSnapshot(mojo::ScopedDataPipeConsumerHandle snapshot);
......@@ -43,7 +43,7 @@ class DartController {
DOMDartState* dart_state() const { return dom_dart_state_.get(); }
private:
void DidLoadMainLibrary(String url);
void DidLoadMainLibrary(std::string url);
void DidLoadSnapshot();
std::unique_ptr<DOMDartState> dom_dart_state_;
......
......@@ -8,7 +8,6 @@
#include "dart/runtime/include/dart_api.h"
#include "sky/engine/tonic/dart_error.h"
#include "sky/engine/tonic/dart_library_natives.h"
#include "sky/engine/tonic/dart_string.h"
#define RETURN_ERROR_HANDLE(handle) \
if (Dart_IsError(handle)) { \
......
......@@ -9,7 +9,7 @@
namespace blink {
DOMDartState::DOMDartState(std::unique_ptr<Window> window, const String& url)
DOMDartState::DOMDartState(std::unique_ptr<Window> window, const std::string& url)
: window_(std::move(window)), url_(url) {
}
......
......@@ -17,13 +17,13 @@ class Window;
class DOMDartState : public DartState {
public:
DOMDartState(std::unique_ptr<Window> window, const String& url);
DOMDartState(std::unique_ptr<Window> window, const std::string& url);
~DOMDartState() override;
virtual void DidSetIsolate();
Window* window() const { return window_.get(); }
const String& url() const { return url_; }
const std::string& url() const { return url_; }
static DOMDartState* Current();
......@@ -37,7 +37,7 @@ class DOMDartState : public DartState {
private:
std::unique_ptr<Window> window_;
String url_;
std::string url_;
DartPersistentValue x_handle_;
DartPersistentValue y_handle_;
......
......@@ -136,7 +136,7 @@ ParagraphBuilder::~ParagraphBuilder()
{
}
void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, double fontSize, double letterSpacing, double wordSpacing, double lineHeight)
void ParagraphBuilder::pushStyle(Int32List& encoded, const std::string& fontFamily, double fontSize, double letterSpacing, double wordSpacing, double lineHeight)
{
DCHECK(encoded.num_elements() == 7);
RefPtr<RenderStyle> style = RenderStyle::create();
......@@ -169,7 +169,7 @@ void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, d
if (mask & tsFontFamilyMask) {
FontFamily family;
family.setFamily(fontFamily);
family.setFamily(String::fromUTF8(fontFamily));
fontDescription.setFamily(family);
}
......@@ -207,11 +207,11 @@ void ParagraphBuilder::pop()
m_currentRenderObject = m_currentRenderObject->parent();
}
void ParagraphBuilder::addText(const String& text)
void ParagraphBuilder::addText(const std::string& text)
{
if (!m_currentRenderObject)
return;
RenderText* renderText = new RenderText(text.impl());
RenderText* renderText = new RenderText(String::fromUTF8(text).impl());
RefPtr<RenderStyle> style = RenderStyle::create();
style->inheritFrom(m_currentRenderObject->style());
renderText->setStyle(style.release());
......
......@@ -23,10 +23,10 @@ public:
~ParagraphBuilder() override;
void pushStyle(Int32List& encoded, const String& fontFamily, double fontSize, double letterSpacing, double wordSpacing, double lineHeight);
void pushStyle(Int32List& encoded, const std::string& fontFamily, double fontSize, double letterSpacing, double wordSpacing, double lineHeight);
void pop();
void addText(const String& text);
void addText(const std::string& text);
PassRefPtr<Paragraph> build(Int32List& encoded, double lineHeight);
......
......@@ -20,8 +20,7 @@ void ScheduleFrame(Dart_NativeArguments args) {
void Render(Dart_NativeArguments args) {
Dart_Handle exception = nullptr;
Scene* scene = DartConverter<Scene*>::FromArgumentsWithNullCheck(
args, 1, exception);
Scene* scene = DartConverter<Scene*>::FromArguments(args, 1, exception);
if (exception) {
Dart_ThrowException(exception);
return;
......
......@@ -17,7 +17,7 @@ SkyHeadless::SkyHeadless(Client* client) : client_(client) {
SkyHeadless::~SkyHeadless() {
}
void SkyHeadless::Init(const String& name) {
void SkyHeadless::Init(const std::string& name) {
DCHECK(!dart_controller_);
dart_controller_ = WTF::MakeUnique<DartController>();
......
......@@ -32,7 +32,7 @@ class SkyHeadless : public WindowClient {
SkyHeadless(Client* client);
~SkyHeadless();
void Init(const String& name);
void Init(const std::string& name);
void RunFromSnapshotBuffer(const uint8_t* buffer, size_t size);
private:
......
......@@ -51,7 +51,7 @@ void SkyView::PopRoute() {
GetWindow()->PopRoute();
}
void SkyView::CreateView(const String& name) {
void SkyView::CreateView(const std::string& name) {
DCHECK(!dart_controller_);
dart_controller_ = WTF::MakeUnique<DartController>();
......@@ -67,7 +67,7 @@ void SkyView::CreateView(const String& name) {
GetWindow()->UpdateLocale(language_code_, country_code_);
}
void SkyView::RunFromLibrary(const WebString& name,
void SkyView::RunFromLibrary(const std::string& name,
DartLibraryProvider* library_provider) {
dart_controller_->RunFromLibrary(name, library_provider);
}
......@@ -76,7 +76,7 @@ void SkyView::RunFromPrecompiledSnapshot() {
dart_controller_->RunFromPrecompiledSnapshot();
}
void SkyView::RunFromSnapshot(const WebString& name,
void SkyView::RunFromSnapshot(const std::string& name,
mojo::ScopedDataPipeConsumerHandle snapshot) {
dart_controller_->RunFromSnapshot(snapshot.Pass());
}
......
......@@ -47,12 +47,12 @@ class SkyView : public WindowClient {
std::unique_ptr<flow::LayerTree> BeginFrame(
base::TimeTicks frame_time);
void CreateView(const String& name);
void CreateView(const std::string& name);
void RunFromLibrary(const WebString& name,
void RunFromLibrary(const std::string& name,
DartLibraryProvider* library_provider);
void RunFromPrecompiledSnapshot();
void RunFromSnapshot(const WebString& name,
void RunFromSnapshot(const std::string& name,
mojo::ScopedDataPipeConsumerHandle snapshot);
void HandlePointerPacket(const pointer::PointerPacketPtr& packet);
......
......@@ -41,10 +41,6 @@ source_set("tonic") {
"dart_snapshot_loader.h",
"dart_state.cc",
"dart_state.h",
"dart_string.cc",
"dart_string.h",
"dart_string_cache.cc",
"dart_string_cache.h",
"dart_timer_heap.cc",
"dart_timer_heap.h",
"dart_wrappable.cc",
......
......@@ -6,11 +6,8 @@
#define SKY_ENGINE_TONIC_DART_CONVERTER_H_
#include <string>
#include <vector>
#include "sky/engine/tonic/dart_state.h"
#include "sky/engine/tonic/dart_string.h"
#include "sky/engine/tonic/dart_string_cache.h"
#include "sky/engine/wtf/text/StringUTF8Adaptor.h"
#include "sky/engine/wtf/text/WTFString.h"
namespace blink {
......@@ -190,79 +187,28 @@ struct DartConverterEnum {
// Strings
template <>
struct DartConverter<String> {
static Dart_Handle ToDart(DartState* state, const String& val) {
if (val.isEmpty())
return Dart_EmptyString();
return Dart_HandleFromWeakPersistent(state->string_cache().Get(val.impl()));
struct DartConverter<std::string> {
static Dart_Handle ToDart(const std::string& val) {
return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(val.data()),
val.length());
}
static void SetReturnValue(Dart_NativeArguments args,
const String& val,
bool auto_scope = true) {
// TODO(abarth): What should we do with auto_scope?
if (val.isEmpty()) {
Dart_SetReturnValue(args, Dart_EmptyString());
return;
}
DartState* state = DartState::Current();
Dart_SetWeakHandleReturnValue(args, state->string_cache().Get(val.impl()));
}
static void SetReturnValueWithNullCheck(Dart_NativeArguments args,
const String& val,
bool auto_scope = true) {
if (val.isNull())
Dart_SetReturnValue(args, Dart_Null());
else
SetReturnValue(args, val, auto_scope);
}
static String FromDart(Dart_Handle handle) {
intptr_t char_size = 0;
intptr_t length = 0;
void* peer = nullptr;
Dart_Handle result =
Dart_StringGetProperties(handle, &char_size, &length, &peer);
if (peer)
return String(static_cast<StringImpl*>(peer));
if (Dart_IsError(result))
return String();
return ExternalizeDartString(handle);
}
static String FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
// TODO(abarth): What should we do with auto_scope?
void* peer = nullptr;
Dart_Handle handle = Dart_GetNativeStringArgument(args, index, &peer);
if (peer)
return reinterpret_cast<StringImpl*>(peer);
if (Dart_IsError(handle))
return String();
return ExternalizeDartString(handle);
const std::string& val) {
Dart_SetReturnValue(args, ToDart(val));
}
static String FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception,
bool auto_scope = true) {
// TODO(abarth): What should we do with auto_scope?
void* peer = nullptr;
Dart_Handle handle = Dart_GetNativeStringArgument(args, index, &peer);
if (peer)
return reinterpret_cast<StringImpl*>(peer);
if (Dart_IsError(handle) || Dart_IsNull(handle))
return String();
return ExternalizeDartString(handle);
static std::string FromDart(Dart_Handle handle) {
uint8_t* data = nullptr;
intptr_t length = 0;;
Dart_StringToUTF8(handle, &data, &length);
return std::string(reinterpret_cast<char*>(data), length);
}
};
template <>
struct DartConverter<AtomicString> {
static Dart_Handle ToDart(DartState* state, const AtomicString& val) {
return DartConverter<String>::ToDart(state, val.string());
static std::string FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromDart(Dart_GetNativeArgument(args, index));
}
};
......@@ -293,11 +239,11 @@ struct DartConverter<const char*> {
// Collections
template <typename T>
struct DartConverter<Vector<T>> {
struct DartConverter<std::vector<T>> {
using ValueType = typename DartConverterTypes<T>::ValueType;
using ConverterType = typename DartConverterTypes<T>::ConverterType;
static Dart_Handle ToDart(const Vector<ValueType>& val) {
static Dart_Handle ToDart(const std::vector<ValueType>& val) {
Dart_Handle list = Dart_NewList(val.size());
if (Dart_IsError(list))
return list;
......@@ -311,35 +257,35 @@ struct DartConverter<Vector<T>> {
return list;
}
static Vector<ValueType> FromDart(Dart_Handle handle) {
Vector<ValueType> result;
static std::vector<ValueType> FromDart(Dart_Handle handle) {
std::vector<ValueType> result;
if (!Dart_IsList(handle))
return result;
intptr_t length = 0;
Dart_ListLength(handle, &length);
if (length == 0) {
if (length == 0)
return result;
}
result.reserveCapacity(length);
result.reserve(length);
Vector<Dart_Handle> items(length);
std::vector<Dart_Handle> items(length);
Dart_Handle items_result = Dart_ListGetRange(handle, 0, length,
items.data());
DCHECK(!Dart_IsError(items_result));
for (intptr_t i = 0; i < length; ++i) {
DCHECK(items[i]);
result.append(DartConverter<ConverterType>::FromDart(items[i]));
result.push_back(DartConverter<ConverterType>::FromDart(items[i]));
}
return result;
}
static Vector<ValueType> FromArguments(Dart_NativeArguments args,
static std::vector<ValueType> FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
// TODO(abarth): What should we do with auto_scope?
return FromDart(Dart_GetNativeArgument(args, index));
}
};
......@@ -370,27 +316,7 @@ struct DartConverter<Dart_Handle> {
};
////////////////////////////////////////////////////////////////////////////////
// Convience wrappers for commonly used conversions
inline Dart_Handle StringToDart(DartState* state, const String& val) {
return DartConverter<String>::ToDart(state, val);
}
inline Dart_Handle StringToDart(DartState* state, const AtomicString& val) {
return DartConverter<AtomicString>::ToDart(state, val);
}
inline String StringFromDart(Dart_Handle handle) {
return DartConverter<String>::FromDart(handle);
}
////////////////////////////////////////////////////////////////////////////////
// Convience wrappers using type inference for ease of code generation
template <typename T>
inline Dart_Handle VectorToDart(const Vector<T>& val) {
return DartConverter<Vector<T>>::ToDart(val);
}
// Convience wrappers using type inference
template<typename T>
Dart_Handle ToDart(const T& object) {
......@@ -398,20 +324,16 @@ Dart_Handle ToDart(const T& object) {
}
////////////////////////////////////////////////////////////////////////////////
// std::string support (slower, but more convienent for some clients)
// std::string support
inline Dart_Handle StdStringToDart(const std::string& val) {
return Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(val.data()),
val.length());
return DartConverter<std::string>::ToDart(val);
}
inline std::string StdStringFromDart(Dart_Handle handle) {
String string = StringFromDart(handle);
StringUTF8Adaptor utf8(string);
return std::string(utf8.data(), utf8.length());
return DartConverter<std::string>::FromDart(handle);
}
// Alias Dart_NewStringFromCString for less typing.
inline Dart_Handle ToDart(const char* val) {
return Dart_NewStringFromCString(val);
......
......@@ -19,20 +19,20 @@ bool DartInvokeField(Dart_Handle target,
target, field, args.size(), const_cast<Dart_Handle*>(args.begin())));
}
bool DartInvokeAppClosure(Dart_Handle closure,
int number_of_arguments,
Dart_Handle* arguments) {
TRACE_EVENT0("flutter", "DartInvoke::DartInvokeAppClosure");
Dart_Handle handle = Dart_InvokeClosure(closure, number_of_arguments, arguments);
bool result = LogIfError(handle);
void DartInvoke(Dart_Handle closure, std::initializer_list<Dart_Handle> args) {
TRACE_EVENT0("flutter", "DartInvoke");
int argc = args.size();
Dart_Handle* argv = const_cast<Dart_Handle*>(args.begin());
Dart_Handle handle = Dart_InvokeClosure(closure, argc, argv);
LogIfError(handle);
CHECK(!Dart_IsCompilationError(handle));
return result;
}
bool DartInvokeAppClosure(Dart_Handle closure,
std::initializer_list<Dart_Handle> args) {
return DartInvokeAppClosure(closure, args.size(),
const_cast<Dart_Handle*>(args.begin()));
void DartInvokeVoid(Dart_Handle closure) {
TRACE_EVENT0("flutter", "DartInvokeVoid");
Dart_Handle handle = Dart_InvokeClosure(closure, 0, nullptr);
LogIfError(handle);
CHECK(!Dart_IsCompilationError(handle));
}
} // namespace blink
......@@ -15,12 +15,8 @@ bool DartInvokeField(Dart_Handle target,
const char* name,
std::initializer_list<Dart_Handle> args);
bool DartInvokeAppClosure(Dart_Handle closure,
int number_of_arguments,
Dart_Handle* arguments);
bool DartInvokeAppClosure(Dart_Handle closure,
std::initializer_list<Dart_Handle> args);
void DartInvoke(Dart_Handle closure, std::initializer_list<Dart_Handle> args);
void DartInvokeVoid(Dart_Handle closure);
} // namespace blink
......
......@@ -56,7 +56,7 @@ class DartLibraryLoader::Job : public DartDependency,
loader_->DidFailJob(this);
return;
}
drainer_ = adoptPtr(new DataPipeDrainer(this, pipe.Pass()));
drainer_ = std::unique_ptr<DataPipeDrainer>(new DataPipeDrainer(this, pipe.Pass()));
}
// DataPipeDrainer::Client
......@@ -67,7 +67,7 @@ class DartLibraryLoader::Job : public DartDependency,
// Subclasses must implement OnDataComplete.
std::string name_;
OwnPtr<DataPipeDrainer> drainer_;
std::unique_ptr<DataPipeDrainer> drainer_;
base::WeakPtrFactory<Job> weak_factory_;
};
......@@ -150,7 +150,7 @@ class DartLibraryLoader::WatcherSignaler {
WatcherSignaler(DartLibraryLoader& loader,
DartDependency* resolved_dependency)
: loader_(loader),
catcher_(adoptPtr(new DartDependencyCatcher(loader))),
catcher_(new DartDependencyCatcher(loader)),
resolved_dependency_(resolved_dependency) {}
~WatcherSignaler() {
......@@ -164,7 +164,7 @@ class DartLibraryLoader::WatcherSignaler {
// Notice that we remove the dependency catcher and extract all the
// callbacks before running any of them. We don't want to be re-entered
// below the callbacks and end up in an inconsistent state.
catcher_.clear();
catcher_ = nullptr;
std::vector<base::Closure> callbacks;
for (const auto& watcher : completed_watchers) {
callbacks.push_back(watcher->callback());
......@@ -178,7 +178,7 @@ class DartLibraryLoader::WatcherSignaler {
private:
DartLibraryLoader& loader_;
OwnPtr<DartDependencyCatcher> catcher_;
std::unique_ptr<DartDependencyCatcher> catcher_;
DartDependency* resolved_dependency_;
};
......
......@@ -36,7 +36,7 @@ void DartMicrotaskQueue::RunMicrotasks() {
if (!dart_state.get())
continue;
DartState::Scope dart_scope(dart_state.get());
DartInvokeAppClosure(callback.value(), 0, nullptr);
DartInvokeVoid(callback.value());
}
}
}
......
......@@ -8,7 +8,6 @@
#include "sky/engine/tonic/dart_converter.h"
#include "sky/engine/tonic/dart_exception_factory.h"
#include "sky/engine/tonic/dart_library_loader.h"
#include "sky/engine/tonic/dart_string_cache.h"
#include "sky/engine/tonic/dart_timer_heap.h"
namespace blink {
......@@ -22,14 +21,9 @@ DartState::Scope::~Scope() {
DartState::DartState()
: isolate_(NULL),
class_library_(std::unique_ptr<DartClassLibrary>(new DartClassLibrary)),
exception_factory_(std::unique_ptr<DartExceptionFactory>(
new DartExceptionFactory(this))),
library_loader_(std::unique_ptr<DartLibraryLoader>(
new DartLibraryLoader(this))),
string_cache_(std::unique_ptr<DartStringCache>(
new DartStringCache)),
timer_heap_(std::unique_ptr<DartTimerHeap>(
new DartTimerHeap())),
exception_factory_(new DartExceptionFactory(this)),
library_loader_(new DartLibraryLoader(this)),
timer_heap_(new DartTimerHeap()),
weak_factory_(this) {
}
......
......@@ -17,7 +17,6 @@ namespace blink {
class DartClassLibrary;
class DartExceptionFactory;
class DartLibraryLoader;
class DartStringCache;
class DartTimerHeap;
// DartState represents the state associated with a given Dart isolate. The
......@@ -51,7 +50,6 @@ class DartState : public base::SupportsUserData {
DartClassLibrary& class_library() { return *class_library_; }
DartExceptionFactory& exception_factory() { return *exception_factory_; }
DartLibraryLoader& library_loader() { return *library_loader_; }
DartStringCache& string_cache() { return *string_cache_; }
DartTimerHeap& timer_heap() { return *timer_heap_; }
Dart_Handle index_handle() { return index_handle_.value(); }
......@@ -63,7 +61,6 @@ class DartState : public base::SupportsUserData {
std::unique_ptr<DartClassLibrary> class_library_;
std::unique_ptr<DartExceptionFactory> exception_factory_;
std::unique_ptr<DartLibraryLoader> library_loader_;
std::unique_ptr<DartStringCache> string_cache_;
std::unique_ptr<DartTimerHeap> timer_heap_;
DartPersistentValue index_handle_;
......
// 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/engine/tonic/dart_string.h"
#include "base/logging.h"
namespace blink {
namespace {
void FinalizeString(void* string_impl) {
DCHECK(string_impl);
reinterpret_cast<StringImpl*>(string_impl)->deref();
}
template <typename CharType>
String Externalize(Dart_Handle handle, intptr_t length) {
if (!length)
return StringImpl::empty();
CharType* buffer = nullptr;
RefPtr<StringImpl> string_impl =
StringImpl::createUninitialized(length, buffer);
string_impl->ref(); // Balanced in FinalizeString.
Dart_Handle result =
Dart_MakeExternalString(handle, buffer, length * sizeof(CharType),
string_impl.get(), FinalizeString);
DCHECK(!Dart_IsError(result));
return String(string_impl.release());
}
} // namespace
Dart_Handle CreateDartString(StringImpl* string_impl) {
if (!string_impl)
return Dart_EmptyString();
string_impl->ref(); // Balanced in FinalizeString.
if (string_impl->is8Bit()) {
return Dart_NewExternalLatin1String(string_impl->characters8(),
string_impl->length(), string_impl,
FinalizeString);
} else {
return Dart_NewExternalUTF16String(string_impl->characters16(),
string_impl->length(), string_impl,
FinalizeString);
}
}
String ExternalizeDartString(Dart_Handle handle) {
DCHECK(Dart_IsString(handle));
DCHECK(!Dart_IsExternalString(handle));
bool is_latin1 = Dart_IsStringLatin1(handle);
intptr_t length;
Dart_StringLength(handle, &length);
if (is_latin1)
return Externalize<LChar>(handle, length);
return Externalize<UChar>(handle, length);
}
} // namespace blink
// 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.
#ifndef SKY_ENGINE_TONIC_DART_STRING_H_
#define SKY_ENGINE_TONIC_DART_STRING_H_
#include "base/logging.h"
#include "dart/runtime/include/dart_api.h"
#include "sky/engine/wtf/text/WTFString.h"
namespace blink {
Dart_Handle CreateDartString(StringImpl* string_impl);
String ExternalizeDartString(Dart_Handle handle);
} // namespace blink
#endif // SKY_ENGINE_TONIC_DART_STRING_H_
// Copyright 2014 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/engine/tonic/dart_string_cache.h"
#include "sky/engine/tonic/dart_state.h"
#include "sky/engine/tonic/dart_string.h"
namespace blink {
DartStringCache::DartStringCache() : last_dart_string_(nullptr) {
}
DartStringCache::~DartStringCache() {
}
Dart_WeakPersistentHandle DartStringCache::GetSlow(StringImpl* string_impl,
bool auto_scope) {
if (Dart_WeakPersistentHandle string = cache_.get(string_impl)) {
last_dart_string_ = string;
last_string_impl_ = string_impl;
return string;
}
if (!auto_scope)
Dart_EnterScope();
Dart_Handle string = CreateDartString(string_impl);
DCHECK(!Dart_IsError(string));
intptr_t size_in_bytes = string_impl->sizeInBytes();
Dart_WeakPersistentHandle wrapper = Dart_NewWeakPersistentHandle(
string, string_impl, size_in_bytes, FinalizeCacheEntry);
string_impl->ref(); // Balanced in FinalizeCacheEntry.
cache_.set(string_impl, wrapper);
last_dart_string_ = wrapper;
last_string_impl_ = string_impl;
if (!auto_scope)
Dart_ExitScope();
return wrapper;
}
void DartStringCache::FinalizeCacheEntry(void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer) {
DartState* state = reinterpret_cast<DartState*>(isolate_callback_data);
StringImpl* string_impl = reinterpret_cast<StringImpl*>(peer);
DartStringCache& cache = state->string_cache();
Dart_WeakPersistentHandle cached_handle = cache.cache_.take(string_impl);
ASSERT_UNUSED(cached_handle, handle == cached_handle);
if (cache.last_dart_string_ == handle) {
cache.last_dart_string_ = nullptr;
cache.last_string_impl_ = nullptr;
}
string_impl->deref();
}
} // namespace blink
// 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.
#ifndef SKY_ENGINE_TONIC_DART_STRING_CACHE_H_
#define SKY_ENGINE_TONIC_DART_STRING_CACHE_H_
#include "base/logging.h"
#include "dart/runtime/include/dart_api.h"
#include "sky/engine/wtf/HashMap.h"
#include "sky/engine/wtf/RefPtr.h"
#include "sky/engine/wtf/text/StringHash.h"
#include "sky/engine/wtf/text/StringImpl.h"
namespace blink {
// DartStringCache maintains a mapping between WTF Strings and Dart strings.
// When you create a Dart string from a WTF String, the underlying character
// data is shared between the two systems.
class DartStringCache {
public:
DartStringCache();
~DartStringCache();
Dart_WeakPersistentHandle Get(StringImpl* string_impl,
bool auto_scope = true) {
DCHECK(string_impl);
if (last_string_impl_.get() == string_impl)
return last_dart_string_;
return GetSlow(string_impl, auto_scope);
}
private:
Dart_WeakPersistentHandle GetSlow(StringImpl* string_impl, bool auto_scope);
static void FinalizeCacheEntry(void*, Dart_WeakPersistentHandle, void* peer);
typedef HashMap<StringImpl*, Dart_WeakPersistentHandle> StringCache;
StringCache cache_;
Dart_WeakPersistentHandle last_dart_string_;
RefPtr<StringImpl> last_string_impl_;
DISALLOW_COPY_AND_ASSIGN(DartStringCache);
};
} // namespace blink
#endif // SKY_ENGINE_TONIC_DART_STRING_CACHE_H_
......@@ -41,13 +41,12 @@ void DartTimerHeap::Run(int id) {
auto it = heap_.find(id);
if (it == heap_.end())
return;
std::unique_ptr<Task> task = std::unique_ptr<Task>(it->second.release());
std::unique_ptr<Task> task = std::move(it->second);
heap_.erase(it);
if (!task->closure.dart_state())
return;
DartIsolateScope scope(task->closure.dart_state()->isolate());
DartApiScope api_scope;
DartInvokeAppClosure(task->closure.value(), 0, nullptr);
DartState::Scope dart_scope(task->closure.dart_state().get());
DartInvokeVoid(task->closure.value());
if (task->repeating)
Schedule(id, std::move(task));
}
......
......@@ -105,23 +105,4 @@ DartWrappable* DartConverterWrappable::FromArguments(Dart_NativeArguments args,
native_fields[DartWrappable::kPeerIndex]);
}
DartWrappable* DartConverterWrappable::FromArgumentsWithNullCheck(
Dart_NativeArguments args, int index, Dart_Handle& exception) {
Dart_Handle handle = Dart_GetNativeArgument(args, index);
if (Dart_IsNull(handle)) {
DartState* state = DartState::Current();
exception = state->exception_factory().CreateNullArgumentException(index);
return nullptr;
}
intptr_t native_fields[DartWrappable::kNumberOfNativeFields];
Dart_Handle result = Dart_GetNativeFieldsOfArgument(
args, index, DartWrappable::kNumberOfNativeFields, native_fields);
if (Dart_IsError(result)) {
exception = Dart_NewStringFromCString(DartError::kInvalidArgument);
return nullptr;
}
return reinterpret_cast<DartWrappable*>(
native_fields[DartWrappable::kPeerIndex]);
}
} // namespace blink
......@@ -12,6 +12,8 @@
#include "sky/engine/tonic/dart_error.h"
#include "sky/engine/tonic/dart_state.h"
#include "sky/engine/tonic/dart_wrapper_info.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefPtr.h"
namespace blink {
class DartGCVisitor;
......@@ -87,9 +89,6 @@ struct DartConverterWrappable {
static DartWrappable* FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static DartWrappable* FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
};
template<typename T>
......@@ -129,15 +128,6 @@ struct DartConverter<
return static_cast<T*>(DartConverterWrappable::FromArguments(
args, index, exception));
}
static T* FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception,
bool auto_scope = true) {
// TODO(abarth): We're missing a type check.
return static_cast<T*>(DartConverterWrappable::FromArgumentsWithNullCheck(
args, index, exception));
}
};
template<typename T>
......
......@@ -19,7 +19,7 @@ Float32List::Float32List(Dart_Handle list)
Dart_TypedDataAcquireData(
list, &type, reinterpret_cast<void**>(&data_), &num_elements_);
DCHECK(!LogIfError(list));
ASSERT(type == Dart_TypedData_kFloat32);
DCHECK(type == Dart_TypedData_kFloat32);
}
Float32List::Float32List(Float32List&& other)
......
......@@ -54,11 +54,6 @@ struct DartConverter<Float32List> {
static Float32List FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Float32List FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
......@@ -19,7 +19,7 @@ Float64List::Float64List(Dart_Handle list)
Dart_TypedDataAcquireData(
list, &type, reinterpret_cast<void**>(&data_), &num_elements_);
DCHECK(!LogIfError(list));
ASSERT(type == Dart_TypedData_kFloat64);
DCHECK(type == Dart_TypedData_kFloat64);
}
Float64List::Float64List(Float64List&& other)
......
......@@ -54,11 +54,6 @@ struct DartConverter<Float64List> {
static Float64List FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Float64List FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
......@@ -19,7 +19,7 @@ Int32List::Int32List(Dart_Handle list)
Dart_TypedDataAcquireData(
list, &type, reinterpret_cast<void**>(&data_), &num_elements_);
DCHECK(!LogIfError(list));
ASSERT(type == Dart_TypedData_kInt32);
DCHECK(type == Dart_TypedData_kInt32);
}
Int32List::Int32List(Int32List&& other)
......
......@@ -56,11 +56,6 @@ struct DartConverter<Int32List> {
static Int32List FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Int32List FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
};
} // namespace blink
......
......@@ -13,12 +13,12 @@ namespace blink {
template <typename HandleType>
struct DartConverter<mojo::ScopedHandleBase<HandleType>> {
static mojo::ScopedHandleBase<HandleType> FromDart(Dart_Handle handle) {
uint64_t mojo_handle64 = 0;
Dart_Handle result = Dart_IntegerToUint64(handle, &mojo_handle64);
if (Dart_IsError(result) || !mojo_handle64)
uint64_t raw_handle = 0;
Dart_Handle result = Dart_IntegerToUint64(handle, &raw_handle);
if (Dart_IsError(result) || !raw_handle)
return mojo::ScopedHandleBase<HandleType>();
HandleType mojo_handle(static_cast<MojoHandle>(mojo_handle64));
HandleType mojo_handle(static_cast<MojoHandle>(raw_handle));
return mojo::MakeScopedHandle(mojo_handle);
}
......@@ -26,17 +26,16 @@ struct DartConverter<mojo::ScopedHandleBase<HandleType>> {
return Dart_NewInteger(static_cast<int64_t>(mojo_handle.release().value()));
}
static mojo::ScopedHandleBase<HandleType> FromArgumentsWithNullCheck(
static mojo::ScopedHandleBase<HandleType> FromArguments(
Dart_NativeArguments args,
int index,
Dart_Handle& exception,
bool auto_scope = true) {
int64_t mojo_handle64 = 0;
Dart_Handle result = Dart_GetNativeIntegerArgument(args, index, &mojo_handle64);
if (Dart_IsError(result) || !mojo_handle64)
Dart_Handle& exception) {
int64_t raw_handle = 0;
Dart_Handle result = Dart_GetNativeIntegerArgument(args, index, &raw_handle);
if (Dart_IsError(result) || !raw_handle)
return mojo::ScopedHandleBase<HandleType>();
HandleType mojo_handle(static_cast<MojoHandle>(mojo_handle64));
HandleType mojo_handle(static_cast<MojoHandle>(raw_handle));
return mojo::MakeScopedHandle(mojo_handle);
}
};
......
......@@ -19,7 +19,7 @@ Uint8List::Uint8List(Dart_Handle list)
Dart_TypedDataAcquireData(
list, &type, reinterpret_cast<void**>(&data_), &num_elements_);
DCHECK(!LogIfError(list));
ASSERT(type == Dart_TypedData_kUint8);
DCHECK(type == Dart_TypedData_kUint8);
}
Uint8List::Uint8List(Uint8List&& other)
......
......@@ -54,12 +54,6 @@ struct DartConverter<Uint8List> {
static Uint8List FromArguments(Dart_NativeArguments args,
int index,
Dart_Handle& exception);
static Uint8List FromArgumentsWithNullCheck(Dart_NativeArguments args,
int index,
Dart_Handle& exception) {
return FromArguments(args, index, exception);
}
static Dart_Handle ToDart(const uint8_t* buffer, unsigned int length);
};
......
......@@ -169,9 +169,8 @@ void Engine::OnPointerPacket(pointer::PointerPacketPtr packet) {
void Engine::RunFromLibrary(const std::string& name) {
TRACE_EVENT0("flutter", "Engine::RunFromLibrary");
sky_view_ = blink::SkyView::Create(this);
sky_view_->CreateView(blink::WebString::fromUTF8(name));
sky_view_->RunFromLibrary(blink::WebString::fromUTF8(name),
dart_library_provider_.get());
sky_view_->CreateView(name);
sky_view_->RunFromLibrary(name, dart_library_provider_.get());
sky_view_->SetDisplayMetrics(display_metrics_);
sky_view_->SetLocale(language_code_, country_code_);
if (!initial_route_.empty())
......@@ -183,8 +182,8 @@ void Engine::RunFromSnapshotStream(
mojo::ScopedDataPipeConsumerHandle snapshot) {
TRACE_EVENT0("flutter", "Engine::RunFromSnapshotStream");
sky_view_ = blink::SkyView::Create(this);
sky_view_->CreateView(blink::WebString::fromUTF8(name));
sky_view_->RunFromSnapshot(blink::WebString::fromUTF8(name), snapshot.Pass());
sky_view_->CreateView(name);
sky_view_->RunFromSnapshot(name, snapshot.Pass());
sky_view_->SetDisplayMetrics(display_metrics_);
sky_view_->SetLocale(language_code_, country_code_);
if (!initial_route_.empty())
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册