[ML][Common] Add TensorsInfo.getTensorSize 99/251699/2
authorRafal Walczyna <r.walczyna@samsung.com>
Mon, 18 Jan 2021 14:19:54 +0000 (15:19 +0100)
committerRafal Walczyna <r.walczyna@samsung.com>
Tue, 19 Jan 2021 10:11:23 +0000 (11:11 +0100)
ACR: TWDAPI-273

Test code:
var ti = new tizen.ml.TensorsInfo();
ti.addTensorInfo("tensor1", "UINT8", [1, 1])
console.log(ti.getTensorSize(0))
ti.addTensorInfo("tensor2", "UINT8", [2, 3, 4])
console.log(ti.getTensorSize(1))
ti.addTensorInfo("tensor2", "FLOAT32", [2, 3, 4])
console.log(ti.getTensorSize(2))
console.log(ti.getTensorSize(-1))

[Verification] Built successful. Tested in Chrome Dev console.

Change-Id: I841da30d03a0590cea66ec6217130163a87f59ec
Signed-off-by: Rafal Walczyna <r.walczyna@samsung.com>
src/ml/js/ml_common.js
src/ml/ml_instance.cc
src/ml/ml_instance.h

index 50f1f58..62be9ff 100755 (executable)
@@ -480,7 +480,35 @@ TensorsInfo.prototype.setTensorType = function() {
 
 TensorsInfo.prototype.getTensorSize = function() {
     _CheckIfTensorsInfoNotDisposed(this._id);
-    throw new WebAPIException(WebAPIException.ABORT_ERR, 'Not implemented');
+    var args = validator_.validateArgs(arguments, [
+        {
+            name: 'index',
+            type: types_.LONG
+        }
+    ]);
+
+    if (!args.has.index) {
+        throw new WebAPIException(
+            WebAPIException.INVALID_VALUES_ERR,
+            'Invalid parameter: index is undefined'
+        );
+    }
+
+    var callArgs = {
+        index: args.index,
+        tensorsInfoId: this._id
+    };
+
+    var result = native_.callSync('MLTensorsInfoGetTensorSize', callArgs);
+
+    if (native_.isFailure(result)) {
+        throw native_.getErrorObjectAndValidate(
+            result,
+            TensorsInfoGettersSettersValidExceptions,
+            AbortError
+        );
+    }
+    return native_.getResultObject(result);
 };
 
 TensorsInfo.prototype.getTensorsData = function() {
index 2e35e2b..f1ce1f9 100644 (file)
@@ -81,6 +81,7 @@ MlInstance::MlInstance() : pipeline_manager_{this} {
   REGISTER_METHOD(MLTensorsInfoSetDimensions);
   REGISTER_METHOD(MLTensorsInfoGetTensorName);
   REGISTER_METHOD(MLTensorsInfoSetTensorName);
+  REGISTER_METHOD(MLTensorsInfoGetTensorSize);
   REGISTER_METHOD(MLTensorsInfoGetTensorType);
   REGISTER_METHOD(MLTensorsInfoSetTensorType);
   REGISTER_METHOD(MLTensorsInfoClone);
@@ -368,6 +369,30 @@ void MlInstance::MLTensorsInfoSetTensorName(const picojson::value& args, picojso
   ReportSuccess(out);
 }
 
+void MlInstance::MLTensorsInfoGetTensorSize(const picojson::value& args, picojson::object& out) {
+  ScopeLogger("args: %s", args.serialize().c_str());
+  CHECK_ARGS(args, kTensorsInfoId, double, out);
+  CHECK_ARGS(args, kIndex, double, out);
+
+  int tensorsInfoId = static_cast<int>(args.get(kTensorsInfoId).get<double>());
+  TensorsInfo* tensorsInfo = GetTensorsInfoManager().GetTensorsInfo(tensorsInfoId);
+  if (nullptr == tensorsInfo) {
+    LogAndReportError(PlatformResult(ErrorCode::ABORT_ERR, "Internal TensorsInfo error"), &out,
+                      ("Could not find TensorsInfo handle with given id: %d", tensorsInfoId));
+    return;
+  }
+  int index = static_cast<int>(args.get(kIndex).get<double>());
+  size_t size;
+  PlatformResult result = tensorsInfo->NativeGetTensorSize(index, &size);
+  if (!result) {
+    LogAndReportError(result, &out);
+    return;
+  }
+
+  picojson::value val = picojson::value{static_cast<double>(size)};
+  ReportSuccess(val, out);
+}
+
 void MlInstance::MLTensorsInfoGetTensorType(const picojson::value& args, picojson::object& out) {
   ScopeLogger("args: %s", args.serialize().c_str());
   CHECK_ARGS(args, kTensorsInfoId, double, out);
index 553ebce..08e6dc8 100644 (file)
@@ -44,6 +44,7 @@ class MlInstance : public common::ParsedInstance {
   void MLTensorsInfoSetDimensions(const picojson::value& args, picojson::object& out);
   void MLTensorsInfoGetTensorName(const picojson::value& args, picojson::object& out);
   void MLTensorsInfoSetTensorName(const picojson::value& args, picojson::object& out);
+  void MLTensorsInfoGetTensorSize(const picojson::value& args, picojson::object& out);
   void MLTensorsInfoGetTensorType(const picojson::value& args, picojson::object& out);
   void MLTensorsInfoSetTensorType(const picojson::value& args, picojson::object& out);
   void MLTensorsInfoClone(const picojson::value& args, picojson::object& out);