From: Rafal Walczyna Date: Mon, 18 Jan 2021 14:19:54 +0000 (+0100) Subject: [ML][Common] Add TensorsInfo.getTensorSize X-Git-Tag: submit/tizen/20210128.113801~15 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5037903948846cac5c9a9bb88f78ef1eba79fb4f;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [ML][Common] Add TensorsInfo.getTensorSize 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 --- diff --git a/src/ml/js/ml_common.js b/src/ml/js/ml_common.js index 50f1f581..62be9ff5 100755 --- a/src/ml/js/ml_common.js +++ b/src/ml/js/ml_common.js @@ -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() { diff --git a/src/ml/ml_instance.cc b/src/ml/ml_instance.cc index 2e35e2b2..f1ce1f9e 100644 --- a/src/ml/ml_instance.cc +++ b/src/ml/ml_instance.cc @@ -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(args.get(kTensorsInfoId).get()); + 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(args.get(kIndex).get()); + size_t size; + PlatformResult result = tensorsInfo->NativeGetTensorSize(index, &size); + if (!result) { + LogAndReportError(result, &out); + return; + } + + picojson::value val = picojson::value{static_cast(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); diff --git a/src/ml/ml_instance.h b/src/ml/ml_instance.h index 553ebcec..08e6dc82 100644 --- a/src/ml/ml_instance.h +++ b/src/ml/ml_instance.h @@ -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);