From: Rafal Walczyna Date: Fri, 15 Jan 2021 11:56:20 +0000 (+0100) Subject: [ML][Common] Add TensorsInfo.dispose method X-Git-Tag: submit/tizen/20210128.113801~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ff6418c688acc730a55d8efb066ed4ea37b075cf;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [ML][Common] Add TensorsInfo.dispose method ACR: TWDAPI-273 Test code: var ti = new tizen.ml.TensorsInfo(); ti.addTensorInfo("tensor1", "UINT8", [1, 1]) ti.getTensorName(0) ti.dispose() ti.getTensorName(0) [Verification] Built successful. Tested in Chrome Dev console. Change-Id: Icae3447ea266de67404f05e23a5d157e5f899ee9 Signed-off-by: Rafal Walczyna --- diff --git a/src/ml/js/ml_common.js b/src/ml/js/ml_common.js index eb54467e..50f1f581 100755 --- a/src/ml/js/ml_common.js +++ b/src/ml/js/ml_common.js @@ -106,6 +106,14 @@ function tensorsInfoCountGetter(id) { } } +var _ValidTensorsInfoIds = new Set(); + +function _CheckIfTensorsInfoNotDisposed(id) { + if (false == _ValidTensorsInfoIds.has(id)) { + throw new WebAPIException(WebAPIException.ABORT_ERR, 'TensorsInfo is disposed'); + } +} + var TensorsInfo = function() { validator_.isConstructorCall(this, TensorsInfo); @@ -126,6 +134,8 @@ var TensorsInfo = function() { id = args.id; } + _ValidTensorsInfoIds.add(id); + Object.defineProperties(this, { count: { enumerable: true, @@ -145,6 +155,7 @@ var TensorsInfoAddTensorInfoValidExceptions = [ ]; TensorsInfo.prototype.addTensorInfo = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'name', @@ -198,6 +209,7 @@ var TensorsInfoGettersSettersValidExceptions = [ ]; TensorsInfo.prototype.clone = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var callArgs = { tensorsInfoId: this._id }; @@ -212,6 +224,7 @@ TensorsInfo.prototype.clone = function() { }; TensorsInfo.prototype.equals = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'other', @@ -239,6 +252,7 @@ TensorsInfo.prototype.equals = function() { }; TensorsInfo.prototype.getDimensions = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'index', @@ -278,6 +292,7 @@ var TensorsInfoSetDimensionsExceptions = [ ]; TensorsInfo.prototype.setDimensions = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'index', @@ -316,6 +331,7 @@ TensorsInfo.prototype.setDimensions = function() { }; TensorsInfo.prototype.getTensorName = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'index', @@ -348,6 +364,7 @@ TensorsInfo.prototype.getTensorName = function() { }; TensorsInfo.prototype.setTensorName = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'index', @@ -391,6 +408,7 @@ TensorsInfo.prototype.setTensorName = function() { }; TensorsInfo.prototype.getTensorType = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'index', @@ -430,6 +448,7 @@ var TensorsInfoSetTensorTypeValidExceptions = [ ]; TensorsInfo.prototype.setTensorType = function() { + _CheckIfTensorsInfoNotDisposed(this._id); var args = validator_.validateArgs(arguments, [ { name: 'index', @@ -460,13 +479,27 @@ TensorsInfo.prototype.setTensorType = function() { }; TensorsInfo.prototype.getTensorSize = function() { + _CheckIfTensorsInfoNotDisposed(this._id); throw new WebAPIException(WebAPIException.ABORT_ERR, 'Not implemented'); }; TensorsInfo.prototype.getTensorsData = function() { + _CheckIfTensorsInfoNotDisposed(this._id); throw new WebAPIException(WebAPIException.ABORT_ERR, 'Not implemented'); }; TensorsInfo.prototype.dispose = function() { - throw new WebAPIException(WebAPIException.ABORT_ERR, 'Not implemented'); + if (false == _ValidTensorsInfoIds.has(this._id)) { + return; + } + var callArgs = { + tensorsInfoId: this._id + }; + + var result = native_.callSync('MLTensorsInfoDispose', callArgs); + + if (native_.isFailure(result)) { + return; + } + _ValidTensorsInfoIds['delete'](this._id); }; diff --git a/src/ml/ml_instance.cc b/src/ml/ml_instance.cc index f9be3534..2e35e2b2 100644 --- a/src/ml/ml_instance.cc +++ b/src/ml/ml_instance.cc @@ -85,6 +85,7 @@ MlInstance::MlInstance() : pipeline_manager_{this} { REGISTER_METHOD(MLTensorsInfoSetTensorType); REGISTER_METHOD(MLTensorsInfoClone); REGISTER_METHOD(MLTensorsInfoEquals); + REGISTER_METHOD(MLTensorsInfoDispose); // Single API begin @@ -482,6 +483,18 @@ void MlInstance::MLTensorsInfoEquals(const picojson::value& args, picojson::obje picojson::value val = picojson::value{equals}; ReportSuccess(val, out); } + +void MlInstance::MLTensorsInfoDispose(const picojson::value& args, picojson::object& out) { + ScopeLogger("args: %s", args.serialize().c_str()); + CHECK_ARGS(args, kTensorsInfoId, double, out); + int tensorsInfoId = static_cast(args.get(kTensorsInfoId).get()); + + PlatformResult result = GetTensorsInfoManager().DisposeTensorsInfo(tensorsInfoId); + if (!result) { + LogAndReportError(result, &out); + } + ReportSuccess(out); +} // Common ML API end // Single API begin diff --git a/src/ml/ml_instance.h b/src/ml/ml_instance.h index 21eb4332..553ebcec 100644 --- a/src/ml/ml_instance.h +++ b/src/ml/ml_instance.h @@ -48,7 +48,7 @@ class MlInstance : public common::ParsedInstance { void MLTensorsInfoSetTensorType(const picojson::value& args, picojson::object& out); void MLTensorsInfoClone(const picojson::value& args, picojson::object& out); void MLTensorsInfoEquals(const picojson::value& args, picojson::object& out); - + void MLTensorsInfoDispose(const picojson::value& args, picojson::object& out); TensorsInfoManager tensors_info_manager_; // Common ML API end diff --git a/src/ml/ml_tensors_info_manager.cc b/src/ml/ml_tensors_info_manager.cc index 69c0020f..33af06f6 100644 --- a/src/ml/ml_tensors_info_manager.cc +++ b/src/ml/ml_tensors_info_manager.cc @@ -339,5 +339,35 @@ TensorsInfo* TensorsInfoManager::GetTensorsInfo(ml_tensors_info_h handle) { return nullptr; } +PlatformResult TensorsInfoManager::DisposeTensorsInfo(int id) { + ScopeLogger("id: %d", id); + + TensorsInfo* t = GetTensorsInfo(id); + + return DisposeTensorsInfo(t); +} + +PlatformResult TensorsInfoManager::DisposeTensorsInfo(ml_tensors_info_h handle) { + ScopeLogger(); + + TensorsInfo* t = GetTensorsInfo(handle); + + return DisposeTensorsInfo(t); +} + +PlatformResult TensorsInfoManager::DisposeTensorsInfo(TensorsInfo* t) { + ScopeLogger(); + + if (nullptr == t) { + LoggerE("Could not find tensor"); + return PlatformResult(ErrorCode::ABORT_ERR); + } + + map_by_handle_.erase(t->Handle()); + map_by_id_.erase(t->Id()); + + return PlatformResult(ErrorCode::NO_ERROR); +} + } // ml } // extension diff --git a/src/ml/ml_tensors_info_manager.h b/src/ml/ml_tensors_info_manager.h index 18d2cbf9..d1d8b3c5 100644 --- a/src/ml/ml_tensors_info_manager.h +++ b/src/ml/ml_tensors_info_manager.h @@ -73,6 +73,9 @@ class TensorsInfoManager { TensorsInfo* GetTensorsInfo(int id); TensorsInfo* GetTensorsInfo(ml_tensors_info_h handle); + PlatformResult DisposeTensorsInfo(int id); + PlatformResult DisposeTensorsInfo(ml_tensors_info_h handle); + PlatformResult DisposeTensorsInfo(TensorsInfo* t); private: TensorsInfoManager(TensorsInfoManager const&) = delete;