From 06980db7adc1e4a79c6e50388eb271afee3fa587 Mon Sep 17 00:00:00 2001 From: Henna Myllys Date: Mon, 20 Mar 2023 12:14:37 +0100 Subject: [PATCH 1/2] LocalStorage prop and link methods split to FU / PU paths Signed-off-by: Henna Myllys Change-Id: I4cbc99df9b90967d6cb133e76e08a83c55250e26 Signed-off-by: Oleg Beletski --- .../declarative_frontend/engine/stateMgmt.js | 20 ++++++++++++-- .../state_mgmt/src/lib/sdk/local_storage.ts | 27 ++++++++++++++----- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/engine/stateMgmt.js b/frameworks/bridge/declarative_frontend/engine/stateMgmt.js index 37dec1d5221..effad21897f 100644 --- a/frameworks/bridge/declarative_frontend/engine/stateMgmt.js +++ b/frameworks/bridge/declarative_frontend/engine/stateMgmt.js @@ -236,7 +236,15 @@ stateMgmtConsole.warn(`${this.constructor.name}: link: no property ${propName} error.`); return undefined; } - let linkResult = p.createLink(linkUser, propName); + let linkResult; + if (ViewStackProcessor.UsesNewPipeline()) { + linkResult = (p instanceof ObservedPropertySimple) + ? new SynchedPropertySimpleTwoWayPU(p, linkUser, propName) + : new SynchedPropertyObjectTwoWayPU(p, linkUser, propName); + } + else { + linkResult = p.createLink(linkUser, propName); + } linkResult.setInfo(subscribersName); return linkResult; } @@ -279,7 +287,15 @@ stateMgmtConsole.warn(`${this.constructor.name}: prop: no property ${propName} error.`); return undefined; } - let propResult = p.createProp(propUser, propName); + let propResult; + if (ViewStackProcessor.UsesNewPipeline()) { + propResult = (p instanceof ObservedPropertySimple) + ? new SynchedPropertySimpleOneWayPU(p, propUser, propName) + : new SynchedPropertyObjectOneWayPU(p, propUser, propName); + } + else { + propResult = p.createProp(propUser, propName); + } propResult.setInfo(subscribersName); return propResult; } diff --git a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/sdk/local_storage.ts b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/sdk/local_storage.ts index 5b2847e212c..f943db99740 100644 --- a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/sdk/local_storage.ts +++ b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/sdk/local_storage.ts @@ -217,7 +217,14 @@ class LocalStorage extends NativeLocalStorage { stateMgmtConsole.warn(`${this.constructor.name}: link: no property ${propName} error.`); return undefined; } - let linkResult = p.createLink(linkUser, propName); + let linkResult; + if (ViewStackProcessor.UsesNewPipeline()) { + linkResult = (p instanceof ObservedPropertySimple) + ? new SynchedPropertySimpleTwoWayPU(p, linkUser, propName) + : new SynchedPropertyObjectTwoWayPU(p, linkUser, propName); + } else { + linkResult = p.createLink(linkUser, propName); + } linkResult.setInfo(subscribersName); return linkResult; } @@ -258,13 +265,21 @@ class LocalStorage extends NativeLocalStorage { * return undefiend if named property does not already exist in LocalStorage. * @since 9 */ - public prop(propName: string, propUser?: IPropertySubscriber, subscribersName?: string): SubscribedAbstractProperty | undefined { - var p: ObservedPropertyAbstract | undefined = this.storage_.get(propName); + public prop(propName: string, propUser?: IPropertySubscriber, subscribersName?: string): SubscribedAbstractProperty | undefined { + var p: ObservedPropertyAbstract | undefined = this.storage_.get(propName); if (p == undefined) { stateMgmtConsole.warn(`${this.constructor.name}: prop: no property ${propName} error.`); return undefined; } - let propResult = p.createProp(propUser, propName) + + let propResult; + if (ViewStackProcessor.UsesNewPipeline()) { + propResult = (p instanceof ObservedPropertySimple) + ? new SynchedPropertySimpleOneWayPU(p, propUser, propName) + : new SynchedPropertyObjectOneWayPU(p, propUser, propName); + } else { + propResult = p.createProp(propUser, propName); + } propResult.setInfo(subscribersName); return propResult; } @@ -281,8 +296,8 @@ class LocalStorage extends NativeLocalStorage { * Apps can use SDK functions of base class SubscribedAbstractProperty * @since 9 */ - public setAndProp(propName: string, defaultValue: S, propUser?: IPropertySubscriber, subscribersName?: string): SubscribedAbstractProperty { - var p: ObservedPropertyAbstract | undefined = this.storage_.get(propName); + public setAndProp(propName: string, defaultValue: T, propUser?: IPropertySubscriber, subscribersName?: string): SubscribedAbstractProperty { + var p: ObservedPropertyAbstract | undefined = this.storage_.get(propName); if (!p) { this.setOrCreate(propName, defaultValue); } -- Gitee From 274bbfbc853bd2d58282a27c9e30a7f3101540e9 Mon Sep 17 00:00:00 2001 From: Guido Grassel Date: Thu, 16 Mar 2023 08:12:10 +0100 Subject: [PATCH 2/2] ViewStackProcessor.UsesNewPipeline() allow FU/PU code branching correctly as long as NewPipeline always uses PU, assume yes Signed-off-by: Guido Grassel Change-Id: I12afda03a9f59df11a9ed702e37ec0b2c5b88691 Signed-off-by: Oleg Beletski --- .../jsview/js_view_stack_processor.cpp | 8 ++++++++ .../declarative_frontend/jsview/js_view_stack_processor.h | 2 ++ .../src/lib/partial_update/pu_viewstack_processor.d.ts | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.cpp index 7e9b32b693e..fa95b0148ae 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.cpp @@ -67,6 +67,7 @@ void JSViewStackProcessor::JSBind(BindingTarget globalObj) "ImplicitPopBeforeContinue", &JSViewStackProcessor::JsImplicitPopBeforeContinue, opt); JSClass::StaticMethod("visualState", JSVisualState, opt); JSClass::StaticMethod("MakeUniqueId", &JSViewStackProcessor::JSMakeUniqueId, opt); + JSClass::StaticMethod("UsesNewPipeline", &JSViewStackProcessor::JsUsesNewPipeline, opt); JSClass::Bind<>(globalObj); } @@ -145,5 +146,12 @@ void JSViewStackProcessor::JSMakeUniqueId(const JSCallbackInfo& info) const auto result = ElementRegister::GetInstance()->MakeUniqueId(); info.SetReturnValue(JSRef::Make(ToJSValue(result))); } +/** + * return true of current Container uses new Pipeline + */ +bool JSViewStackProcessor::JsUsesNewPipeline() +{ + return Container::IsCurrentUseNewPipeline(); +} } // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.h b/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.h index 67acaae9ad3..7e5ddfa8848 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.h +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_stack_processor.h @@ -76,6 +76,8 @@ public: return it->second; } + static bool JsUsesNewPipeline(); + private: static void JSVisualState(const JSCallbackInfo& info); static std::map> viewMap_; diff --git a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/partial_update/pu_viewstack_processor.d.ts b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/partial_update/pu_viewstack_processor.d.ts index 01fe6f2651c..900f973c1f6 100644 --- a/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/partial_update/pu_viewstack_processor.d.ts +++ b/frameworks/bridge/declarative_frontend/state_mgmt/src/lib/partial_update/pu_viewstack_processor.d.ts @@ -70,4 +70,11 @@ declare class ViewStackProcessor { * JS signatire: MakeUniqueId() : number */ public static MakeUniqueId(): number; + + /** + * return true if the current Container uses PartialUpdate code path + * see Container class foundation/arkui/ace_engine/frameworks/core/common/container.h + * calls UsesNewPipeline static function + */ + public static UsesNewPipeline(); } -- Gitee