[ML][Common] Add TensorsInfo.dispose method 16/251616/3
authorRafal Walczyna <r.walczyna@samsung.com>
Fri, 15 Jan 2021 11:56:20 +0000 (12:56 +0100)
committerRafal Walczyna <r.walczyna@samsung.com>
Tue, 19 Jan 2021 10:09:43 +0000 (11:09 +0100)
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 <r.walczyna@samsung.com>
src/ml/js/ml_common.js
src/ml/ml_instance.cc
src/ml/ml_instance.h
src/ml/ml_tensors_info_manager.cc
src/ml/ml_tensors_info_manager.h

index eb54467..50f1f58 100755 (executable)
@@ -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);
 };
index f9be353..2e35e2b 100644 (file)
@@ -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<int>(args.get(kTensorsInfoId).get<double>());
+
+  PlatformResult result = GetTensorsInfoManager().DisposeTensorsInfo(tensorsInfoId);
+  if (!result) {
+    LogAndReportError(result, &out);
+  }
+  ReportSuccess(out);
+}
 // Common ML API end
 
 // Single API begin
index 21eb433..553ebce 100644 (file)
@@ -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
 
index 69c0020..33af06f 100644 (file)
@@ -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
index 18d2cbf..d1d8b3c 100644 (file)
@@ -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;