{"action":"created","comment":{"url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/comments/23374167","id":23374167,"diff_hunk":"@@ -0,0 +1,483 @@\n+// Copyright (C) 2011 Samsung Electronics Corporation. All rights reserved.\n+// Copyright (C) 2015 Intel Corporation All rights reserved.\n+// Use of this source code is governed by a BSD-style license that can be\n+// found in the LICENSE file.\n+\n+#include \"config.h\"\n+\n+#if ENABLE(WEBCL)\n+#include \"bindings/modules/v8/V8WebCLPlatform.h\"\n+#include \"modules/webcl/WebCL.h\"\n+#include \"modules/webcl/WebCLContext.h\"\n+#include \"modules/webcl/WebCLDevice.h\"\n+#include \"modules/webcl/WebCLException.h\"\n+#include \"modules/webcl/WebCLOpenCL.h\"\n+\n+namespace blink {\n+\n+WebCLDevice::~WebCLDevice()\n+{\n+    release();\n+    ASSERT(!m_clDeviceId);\n+}\n+\n+PassRefPtr<WebCLDevice> WebCLDevice::create(cl_device_id deviceId)\n+{\n+    return adoptRef(new WebCLDevice(deviceId, nullptr));\n+}\n+\n+PassRefPtr<WebCLDevice> WebCLDevice::create(cl_device_id deviceId, WebCLPlatform* platform)\n+{\n+    return adoptRef(new WebCLDevice(deviceId, platform));\n+}\n+\n+unsigned WebCLDevice::getQueueProperties()\n+{\n+    cl_command_queue_properties queueProperties = 0;\n+    clGetDeviceInfo(m_clDeviceId, CL_DEVICE_QUEUE_PROPERTIES, sizeof(cl_command_queue_properties), &queueProperties, nullptr);\n+    return static_cast<unsigned>(queueProperties);\n+}\n+\n+unsigned long long WebCLDevice::getMaxMemAllocSize()\n+{\n+    cl_ulong ulongUnits = 0;\n+    clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(cl_ulong), &ulongUnits, nullptr);\n+    return static_cast<unsigned long long>(ulongUnits);\n+}\n+\n+unsigned WebCLDevice::getImage2DMaxWidth()\n+{\n+    size_t sizetUnits = 0;\n+    clGetDeviceInfo(m_clDeviceId, CL_DEVICE_IMAGE2D_MAX_WIDTH, sizeof(size_t), &sizetUnits, nullptr);\n+    return static_cast<unsigned>(sizetUnits);\n+}\n+\n+unsigned WebCLDevice::getImage2DMaxHeight()\n+{\n+    size_t sizetUnits = 0;\n+    clGetDeviceInfo(m_clDeviceId, CL_DEVICE_IMAGE2D_MAX_HEIGHT, sizeof(size_t), &sizetUnits, nullptr);\n+    return static_cast<unsigned>(sizetUnits);\n+}\n+\n+unsigned WebCLDevice::getMaxWorkGroup()\n+{\n+    size_t sizetUnits = 0;\n+    clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(size_t), &sizetUnits, nullptr);\n+    return static_cast<unsigned>(sizetUnits);\n+}\n+\n+Vector<unsigned> WebCLDevice::getMaxWorkItem()\n+{\n+    size_t sizetUnits = 0;\n+    size_t sizetArray[3] = {0};\n+    cl_int err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(size_t), &sizetUnits, nullptr);\n+    if (err == CL_SUCCESS) {\n+       err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(sizetArray), &sizetArray, nullptr);\n+       if (err == CL_SUCCESS) {\n+           Vector<unsigned> values;\n+           for (unsigned i = 0; i < static_cast<unsigned>(sizetUnits); ++i)\n+               values.append(static_cast<unsigned>(sizetArray[i]));\n+           return values;\n+       }\n+    }\n+    return Vector<unsigned>();\n+}\n+\n+ScriptValue WebCLDevice::getInfo(ScriptState* scriptState, unsigned deviceType, ExceptionState& es)\n+{\n+    v8::Handle<v8::Object> creationContext = scriptState->context()->Global();\n+    v8::Isolate* isolate = scriptState->isolate();\n+\n+    if (!m_clDeviceId) {\n+        es.throwWebCLException(WebCLException::INVALID_DEVICE, WebCLException::invalidDeviceMessage);\n+        return ScriptValue(scriptState, v8::Null(isolate));\n+    }\n+\n+    if (!WebCLInputChecker::isValidDeviceInfoType(deviceType)) {\n+        es.throwWebCLException(WebCLException::INVALID_VALUE, WebCLException::invalidValueMessage);\n+        return ScriptValue(scriptState, v8::Null(isolate));\n+    }\n+\n+    cl_int err = CL_SUCCESS;\n+    char deviceString[1024];\n+    cl_uint uintUnits = 0;\n+    size_t sizetUnits = 0;\n+    cl_ulong ulongUnits = 0;\n+    cl_uint infoValue = 0;\n+    cl_bool boolUnits = false;\n+    cl_device_type type = 0;\n+    cl_device_fp_config deviceFPConfig = 0;\n+    cl_device_mem_cache_type globalType = 0;\n+    cl_device_exec_capabilities exec = 0;\n+    cl_device_local_mem_type localType = 0;\n+\n+    switch(deviceType) {\n+    case CL_DEVICE_PROFILE:\n+        return ScriptValue(scriptState, v8String(isolate, String(\"WEBCL_PROFILE\")));\n+    case CL_DEVICE_VERSION:\n+        return ScriptValue(scriptState, v8String(isolate, String(\"WebCL 1.0\")));\n+    case CL_DEVICE_OPENCL_C_VERSION:\n+        return ScriptValue(scriptState, v8String(isolate, String(\"WebCL C 1.0\")));\n+    case CL_DEVICE_EXTENSIONS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_EXTENSIONS, sizeof(deviceString), &deviceString, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8String(isolate, String(deviceString)));\n+        break;\n+    case CL_DEVICE_NAME:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NAME, sizeof(deviceString), &deviceString, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8String(isolate, String(deviceString)));\n+        break;\n+    case CL_DEVICE_VENDOR:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_VENDOR, sizeof(deviceString), &deviceString, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8String(isolate, String(deviceString)));\n+        break;\n+    case CL_DRIVER_VERSION:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DRIVER_VERSION, sizeof(deviceString), &deviceString, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8String(isolate, String(deviceString)));\n+        break;\n+    case CL_DEVICE_ADDRESS_BITS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_ADDRESS_BITS, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_INT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MAX_CLOCK_FREQUENCY:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MAX_CONSTANT_ARGS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_CONSTANT_ARGS, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MAX_READ_IMAGE_ARGS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_READ_IMAGE_ARGS, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MAX_SAMPLERS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_SAMPLERS, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MAX_WRITE_IMAGE_ARGS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MEM_BASE_ADDR_ALIGN:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MEM_BASE_ADDR_ALIGN, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_VENDOR_ID:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_VENDOR_ID, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_MAX_COMPUTE_UNITS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &uintUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(uintUnits)));\n+        break;\n+    case CL_DEVICE_IMAGE2D_MAX_HEIGHT: {\n+        unsigned result = getImage2DMaxHeight();\n+        if (result)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, result));\n+        break;\n+    }\n+    case CL_DEVICE_IMAGE2D_MAX_WIDTH: {\n+        unsigned result = getImage2DMaxWidth();\n+        if (result)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, result));\n+        break;\n+    }\n+    case CL_DEVICE_IMAGE3D_MAX_DEPTH:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_IMAGE3D_MAX_DEPTH, sizeof(size_t), &sizetUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(sizetUnits)));\n+        break;\n+    case CL_DEVICE_IMAGE3D_MAX_HEIGHT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_IMAGE3D_MAX_HEIGHT, sizeof(size_t), &sizetUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(sizetUnits)));\n+        break;\n+    case CL_DEVICE_IMAGE3D_MAX_WIDTH:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_IMAGE3D_MAX_WIDTH, sizeof(size_t), &sizetUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(sizetUnits)));\n+        break;\n+    case CL_DEVICE_MAX_PARAMETER_SIZE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_PARAMETER_SIZE, sizeof(size_t), &sizetUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(sizetUnits)));\n+        break;\n+    case CL_DEVICE_MAX_WORK_GROUP_SIZE: {\n+        unsigned result  = getMaxWorkGroup();\n+        if (result)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, result));\n+        break;\n+    }\n+    case CL_DEVICE_MAX_WORK_ITEM_SIZES: {\n+        Vector<unsigned> result = getMaxWorkItem();\n+        if (result.size())\n+            return ScriptValue(scriptState, v8Array(result, creationContext, isolate));\n+        break;\n+    }\n+    case CL_DEVICE_PROFILING_TIMER_RESOLUTION:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PROFILING_TIMER_RESOLUTION, sizeof(size_t), &sizetUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(sizetUnits)));\n+        break;\n+    case CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(size_t), &sizetUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(sizetUnits)));\n+        break;\n+    case CL_DEVICE_LOCAL_MEM_SIZE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &ulongUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned long long>(ulongUnits)));\n+        break;\n+    case CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(cl_ulong), &ulongUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned long long>(ulongUnits)));\n+        break;\n+    case CL_DEVICE_MAX_MEM_ALLOC_SIZE: {\n+        unsigned long long result = getMaxMemAllocSize();\n+        if (result)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, result));\n+        break;\n+    }\n+    case CL_DEVICE_GLOBAL_MEM_CACHE_SIZE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, sizeof(cl_ulong), &ulongUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned long long>(ulongUnits)));\n+        break;\n+    case CL_DEVICE_GLOBAL_MEM_SIZE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(cl_ulong), &ulongUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned long long>(ulongUnits)));\n+        break;\n+    case CL_DEVICE_AVAILABLE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_AVAILABLE, sizeof(cl_bool), &boolUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Boolean::New(isolate, static_cast<bool>(boolUnits)));\n+        break;\n+    case CL_DEVICE_COMPILER_AVAILABLE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_COMPILER_AVAILABLE, sizeof(cl_bool), &boolUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Boolean::New(isolate, static_cast<bool>(boolUnits)));\n+        break;\n+    case CL_DEVICE_HOST_UNIFIED_MEMORY:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(cl_bool), &boolUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Boolean::New(isolate, static_cast<bool>(boolUnits)));\n+        break;\n+    case CL_DEVICE_ENDIAN_LITTLE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_ENDIAN_LITTLE, sizeof(cl_bool), &boolUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Boolean::New(isolate, static_cast<bool>(boolUnits)));\n+        break;\n+    case CL_DEVICE_ERROR_CORRECTION_SUPPORT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(cl_bool), &boolUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Boolean::New(isolate, static_cast<bool>(boolUnits)));\n+        break;\n+    case CL_DEVICE_IMAGE_SUPPORT:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_IMAGE_SUPPORT, sizeof(cl_bool), &boolUnits, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Boolean::New(isolate, static_cast<bool>(boolUnits)));\n+        break;\n+    case CL_DEVICE_TYPE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_TYPE, sizeof(type), &type, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(type)));\n+        break;\n+    case CL_DEVICE_SINGLE_FP_CONFIG:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_SINGLE_FP_CONFIG, sizeof(deviceFPConfig), &deviceFPConfig, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(deviceFPConfig)));\n+        break;\n+    case CL_DEVICE_QUEUE_PROPERTIES: {\n+        unsigned result = getQueueProperties();\n+        if (result)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, result));\n+        break;\n+    }\n+    case CL_DEVICE_PLATFORM:\n+        return ScriptValue(scriptState, toV8(m_platform, creationContext, isolate));\n+    case CL_DEVICE_EXECUTION_CAPABILITIES:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_EXECUTION_CAPABILITIES, sizeof(cl_device_exec_capabilities), &exec, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(exec)));\n+        break;\n+    case CL_DEVICE_GLOBAL_MEM_CACHE_TYPE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, sizeof(cl_device_mem_cache_type), &globalType, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(globalType)));\n+        break;\n+    case CL_DEVICE_LOCAL_MEM_TYPE:\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(cl_device_local_mem_type), &localType, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(localType)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE:\n+        if (!m_extension.isEnabledExtension(\"KHR_fp64\"))\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, 0));\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, sizeof(cl_uint), &infoValue, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(infoValue)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:\n+        if (!m_extension.isEnabledExtension(\"KHR_fp64\"))\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, 0));\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, sizeof(cl_uint), &infoValue, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(infoValue)));\n+        break;\n+    case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF:\n+        if (!m_extension.isEnabledExtension(\"KHR_fp16\"))\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, 0));\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, sizeof(cl_uint), &infoValue, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(infoValue)));\n+        break;\n+    case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF:\n+        if (!m_extension.isEnabledExtension(\"KHR_fp16\"))\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, 0));\n+        err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, sizeof(cl_uint), &infoValue, nullptr);\n+        if (err == CL_SUCCESS)\n+            return ScriptValue(scriptState, v8::Integer::NewFromUnsigned(isolate, static_cast<unsigned>(infoValue)));\n+        break;\n+    default:\n+        es.throwWebCLException(WebCLException::FAILURE, WebCLException::failureMessage);\n+        return ScriptValue(scriptState, v8::Null(isolate));\n+    }\n+\n+    WebCLException::throwException(err, es);\n+    return ScriptValue(scriptState, v8::Null(isolate));\n+}\n+\n+void WebCLDevice::cacheDeviceExtensions()\n+{\n+    char device_string[MULTI_EXTENSIONS_LENGTH] = \"\";\n+    char extensions[MAX_EXTENSION_NUM][SINGLE_EXTENSION_LENGTH];\n+    int count = 0;\n+    int word_length = 0;\n+    int i = 0;\n+\n+    if (!m_clDeviceId)\n+        return;\n+\n+    cl_int err = clGetDeviceInfo(m_clDeviceId, CL_DEVICE_EXTENSIONS, sizeof(device_string), &device_string, nullptr);\n+\n+    if (err != CL_SUCCESS)\n+        return;\n+\n+    while (device_string[i] != '\\0') {\n+        while (device_string[i] == ' ')\n+            ++i;\n+        while (device_string[i] != ' ' && device_string[i] != '\\0')\n+            extensions[count][word_length++] = device_string[i++];\n+        extensions[count++][word_length] = '\\0';\n+        word_length = 0;\n+    }\n+\n+    for (i = 0; i < count; i++) {\n+        m_extension.addSupportedCLExtension(String(extensions[i]));\n+    }\n+}\n+\n+bool WebCLDevice::enableExtension(const String& name)\n+{\n+    return m_extension.enableExtension(name);\n+}\n+\n+Vector<String> WebCLDevice::getSupportedExtensions()\n+{\n+    return m_extension.getSupportedExtensions();","path":"Source/modules/webcl/WebCLDevice.cpp","position":458,"original_position":458,"commit_id":"d83cb853a6d8efa7a749e4b08594bd79613e65f1","original_commit_id":"d83cb853a6d8efa7a749e4b08594bd79613e65f1","user":{"login":"ds-hwang","id":1198635,"avatar_url":"https://avatars.githubusercontent.com/u/1198635?v=3","gravatar_id":"","url":"https://api.github.com/users/ds-hwang","html_url":"https://github.com/ds-hwang","followers_url":"https://api.github.com/users/ds-hwang/followers","following_url":"https://api.github.com/users/ds-hwang/following{/other_user}","gists_url":"https://api.github.com/users/ds-hwang/gists{/gist_id}","starred_url":"https://api.github.com/users/ds-hwang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ds-hwang/subscriptions","organizations_url":"https://api.github.com/users/ds-hwang/orgs","repos_url":"https://api.github.com/users/ds-hwang/repos","events_url":"https://api.github.com/users/ds-hwang/events{/privacy}","received_events_url":"https://api.github.com/users/ds-hwang/received_events","type":"User","site_admin":false},"body":"much better","created_at":"2015-01-22T13:19:39Z","updated_at":"2015-01-22T13:19:39Z","html_url":"https://github.com/crosswalk-project/blink-crosswalk/pull/22#discussion_r23374167","pull_request_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22","_links":{"self":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/comments/23374167"},"html":{"href":"https://github.com/crosswalk-project/blink-crosswalk/pull/22#discussion_r23374167"},"pull_request":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22"}}},"pull_request":{"url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22","id":21555398,"html_url":"https://github.com/crosswalk-project/blink-crosswalk/pull/22","diff_url":"https://github.com/crosswalk-project/blink-crosswalk/pull/22.diff","patch_url":"https://github.com/crosswalk-project/blink-crosswalk/pull/22.patch","issue_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues/22","number":22,"state":"open","locked":false,"title":"[Android] WebCL support for Crosswalk.","user":{"login":"junmin-zhu","id":1031699,"avatar_url":"https://avatars.githubusercontent.com/u/1031699?v=3","gravatar_id":"","url":"https://api.github.com/users/junmin-zhu","html_url":"https://github.com/junmin-zhu","followers_url":"https://api.github.com/users/junmin-zhu/followers","following_url":"https://api.github.com/users/junmin-zhu/following{/other_user}","gists_url":"https://api.github.com/users/junmin-zhu/gists{/gist_id}","starred_url":"https://api.github.com/users/junmin-zhu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junmin-zhu/subscriptions","organizations_url":"https://api.github.com/users/junmin-zhu/orgs","repos_url":"https://api.github.com/users/junmin-zhu/repos","events_url":"https://api.github.com/users/junmin-zhu/events{/privacy}","received_events_url":"https://api.github.com/users/junmin-zhu/received_events","type":"User","site_admin":false},"body":"WebCL 1.0 defines a JavaScript binding to the Khronos OpenCL standard\r\nfor heterogeneous parallel computing. Its spec is available at:\r\nhttp://www.khronos.org/registry/webcl/specs/latest/1.0/\r\n\r\nThis patch includes WebCL basic APIs support, dynamic loading mechanism\r\netc. WebCL support is controlled by \"ENABLE_WEBCL\" flag.\r\nIf you want to play with WebCL, please add \"-Duse_webcl=1\" when running\r\nthe \"xwalk/gyp_xwalk\" before building. And run conformance test\r\n(https://github.com/KhronosGroup/WebCL-conformance) in the XWalkCoreShell.\r\n\r\nKnown issue:\r\n    1. miss oilpan support.\r\n    2. miss cl_khr_gl_sharing extension support.\r\n    3. load library in render process.\r\n\r\nBUG=XWALK-2550","created_at":"2014-09-22T01:32:42Z","updated_at":"2015-01-22T13:19:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"435e2a696d102c7868953509fe71d644d0c9b111","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22/commits","review_comments_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22/comments","review_comment_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/comments/{number}","comments_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues/22/comments","statuses_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/statuses/d83cb853a6d8efa7a749e4b08594bd79613e65f1","head":{"label":"junmin-zhu:webcl","ref":"webcl","sha":"d83cb853a6d8efa7a749e4b08594bd79613e65f1","user":{"login":"junmin-zhu","id":1031699,"avatar_url":"https://avatars.githubusercontent.com/u/1031699?v=3","gravatar_id":"","url":"https://api.github.com/users/junmin-zhu","html_url":"https://github.com/junmin-zhu","followers_url":"https://api.github.com/users/junmin-zhu/followers","following_url":"https://api.github.com/users/junmin-zhu/following{/other_user}","gists_url":"https://api.github.com/users/junmin-zhu/gists{/gist_id}","starred_url":"https://api.github.com/users/junmin-zhu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junmin-zhu/subscriptions","organizations_url":"https://api.github.com/users/junmin-zhu/orgs","repos_url":"https://api.github.com/users/junmin-zhu/repos","events_url":"https://api.github.com/users/junmin-zhu/events{/privacy}","received_events_url":"https://api.github.com/users/junmin-zhu/received_events","type":"User","site_admin":false},"repo":{"id":15662150,"name":"blink-crosswalk","full_name":"junmin-zhu/blink-crosswalk","owner":{"login":"junmin-zhu","id":1031699,"avatar_url":"https://avatars.githubusercontent.com/u/1031699?v=3","gravatar_id":"","url":"https://api.github.com/users/junmin-zhu","html_url":"https://github.com/junmin-zhu","followers_url":"https://api.github.com/users/junmin-zhu/followers","following_url":"https://api.github.com/users/junmin-zhu/following{/other_user}","gists_url":"https://api.github.com/users/junmin-zhu/gists{/gist_id}","starred_url":"https://api.github.com/users/junmin-zhu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/junmin-zhu/subscriptions","organizations_url":"https://api.github.com/users/junmin-zhu/orgs","repos_url":"https://api.github.com/users/junmin-zhu/repos","events_url":"https://api.github.com/users/junmin-zhu/events{/privacy}","received_events_url":"https://api.github.com/users/junmin-zhu/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/junmin-zhu/blink-crosswalk","description":"Blink repository used by Crosswalk.","fork":true,"url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk","forks_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/forks","keys_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/teams","hooks_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/hooks","issue_events_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/issues/events{/number}","events_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/events","assignees_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/assignees{/user}","branches_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/branches{/branch}","tags_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/tags","blobs_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/git/refs{/sha}","trees_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/statuses/{sha}","languages_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/languages","stargazers_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/stargazers","contributors_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/contributors","subscribers_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/subscribers","subscription_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/subscription","commits_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/commits{/sha}","git_commits_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/git/commits{/sha}","comments_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/comments{/number}","issue_comment_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/issues/comments/{number}","contents_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/contents/{+path}","compare_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/merges","archive_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/downloads","issues_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/issues{/number}","pulls_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/pulls{/number}","milestones_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/milestones{/number}","notifications_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/labels{/name}","releases_url":"https://api.github.com/repos/junmin-zhu/blink-crosswalk/releases{/id}","created_at":"2014-01-06T01:12:12Z","updated_at":"2014-03-24T13:04:03Z","pushed_at":"2015-01-21T05:28:48Z","git_url":"git://github.com/junmin-zhu/blink-crosswalk.git","ssh_url":"git@github.com:junmin-zhu/blink-crosswalk.git","clone_url":"https://github.com/junmin-zhu/blink-crosswalk.git","svn_url":"https://github.com/junmin-zhu/blink-crosswalk","homepage":"","size":5249669,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"crosswalk-project:master","ref":"master","sha":"ef7455cd2a78bb7f85f5d8356047daf658b1ce5a","user":{"login":"crosswalk-project","id":4867377,"avatar_url":"https://avatars.githubusercontent.com/u/4867377?v=3","gravatar_id":"","url":"https://api.github.com/users/crosswalk-project","html_url":"https://github.com/crosswalk-project","followers_url":"https://api.github.com/users/crosswalk-project/followers","following_url":"https://api.github.com/users/crosswalk-project/following{/other_user}","gists_url":"https://api.github.com/users/crosswalk-project/gists{/gist_id}","starred_url":"https://api.github.com/users/crosswalk-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crosswalk-project/subscriptions","organizations_url":"https://api.github.com/users/crosswalk-project/orgs","repos_url":"https://api.github.com/users/crosswalk-project/repos","events_url":"https://api.github.com/users/crosswalk-project/events{/privacy}","received_events_url":"https://api.github.com/users/crosswalk-project/received_events","type":"Organization","site_admin":false},"repo":{"id":10818847,"name":"blink-crosswalk","full_name":"crosswalk-project/blink-crosswalk","owner":{"login":"crosswalk-project","id":4867377,"avatar_url":"https://avatars.githubusercontent.com/u/4867377?v=3","gravatar_id":"","url":"https://api.github.com/users/crosswalk-project","html_url":"https://github.com/crosswalk-project","followers_url":"https://api.github.com/users/crosswalk-project/followers","following_url":"https://api.github.com/users/crosswalk-project/following{/other_user}","gists_url":"https://api.github.com/users/crosswalk-project/gists{/gist_id}","starred_url":"https://api.github.com/users/crosswalk-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crosswalk-project/subscriptions","organizations_url":"https://api.github.com/users/crosswalk-project/orgs","repos_url":"https://api.github.com/users/crosswalk-project/repos","events_url":"https://api.github.com/users/crosswalk-project/events{/privacy}","received_events_url":"https://api.github.com/users/crosswalk-project/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/crosswalk-project/blink-crosswalk","description":"Blink repository used by Crosswalk.","fork":false,"url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk","forks_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/forks","keys_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/keys{/key_id}","collaborators_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/teams","hooks_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/hooks","issue_events_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues/events{/number}","events_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/events","assignees_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/assignees{/user}","branches_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/branches{/branch}","tags_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/tags","blobs_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/git/refs{/sha}","trees_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/git/trees{/sha}","statuses_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/statuses/{sha}","languages_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/languages","stargazers_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/stargazers","contributors_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/contributors","subscribers_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/subscribers","subscription_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/subscription","commits_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/commits{/sha}","git_commits_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/git/commits{/sha}","comments_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/comments{/number}","issue_comment_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues/comments/{number}","contents_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/contents/{+path}","compare_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/compare/{base}...{head}","merges_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/merges","archive_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/downloads","issues_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues{/number}","pulls_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls{/number}","milestones_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/milestones{/number}","notifications_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/labels{/name}","releases_url":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/releases{/id}","created_at":"2013-06-20T12:01:30Z","updated_at":"2014-12-12T13:47:50Z","pushed_at":"2015-01-15T13:17:57Z","git_url":"git://github.com/crosswalk-project/blink-crosswalk.git","ssh_url":"git@github.com:crosswalk-project/blink-crosswalk.git","clone_url":"https://github.com/crosswalk-project/blink-crosswalk.git","svn_url":"https://github.com/crosswalk-project/blink-crosswalk","homepage":"","size":5470405,"stargazers_count":7,"watchers_count":7,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":32,"mirror_url":null,"open_issues_count":2,"forks":32,"open_issues":2,"watchers":7,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22"},"html":{"href":"https://github.com/crosswalk-project/blink-crosswalk/pull/22"},"issue":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues/22"},"comments":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/issues/22/comments"},"review_comments":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22/comments"},"review_comment":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/pulls/22/commits"},"statuses":{"href":"https://api.github.com/repos/crosswalk-project/blink-crosswalk/statuses/d83cb853a6d8efa7a749e4b08594bd79613e65f1"}}}}