DETAILED ACTION
The present application, filed on or after March 16, 2013, is being examined under the first inventor to file provisions of the AIA .
Claims 1-20 are pending for examination.
Claim Rejections - 35 USC § 112(b)
The following is a quotation of 35 U.S.C. 112(b):
(b) CONCLUSION.—The specification shall conclude with one or more claims particularly pointing out and distinctly claiming the subject matter which the inventor or a joint inventor regards as the invention.
Claim 13-14, 16 and 18-20 are rejected under 35 U.S.C. 112(b), second paragraph, as being indefinite for failing to particularly point out and distinctly claim the subject matter which the inventor or a joint inventor, or for pre-AIA the applicant regards as the invention.
As per claim 13:
Line 11, “the data structure” lacks antecedence basis.
Line 12, “the synchronization file” lacks antecedence basis.
As per claim 14:
Line 2, “the runtime memory or the persistent memory” lacks antecedence basis.
Line 6, “the memory system” lacks antecedence basis.
As per claim 16:
The term “relative to” in claim 16, line 3, is a relative term which renders the claim indefinite. The term “relative to” is not defined by the claim, the specification does not provide a standard for ascertaining the requisite degree, and one of ordinary skill in the art would not be reasonably apprised of the scope of the invention.
As per claim 18:
The term “relative to” in claim 18, line 2, is a relative term which renders the claim indefinite. The term “relative to” is not defined by the claim, the specification does not provide a standard for ascertaining the requisite degree, and one of ordinary skill in the art would not be reasonably apprised of the scope of the invention.
As per claims 14 and 19-20:
They are system claims that depend from rejected claims and do not resolve the deficiencies thereof and are therefore rejected for the same reasons as above.
Claim Rejections - 35 USC § 103
The following is a quotation of pre-AIA 35 U.S.C. 103(a) which forms the basis for all obviousness rejections set forth in this Office action:
(a) A patent may not be obtained though the invention is not identically disclosed or described as set forth in section 102, if the differences between the subject matter sought to be patented and the prior art are such that the subject matter as a whole would have been obvious at the time the invention was made to a person having ordinary skill in the art to which said subject matter pertains. Patentability shall not be negated by the manner in which the invention was made.
Claims 1, 7, 9-10 and 12-14 are rejected under 35 U.S.C. 103 as being unpatentable over Chan et al. (US Pub. 2014/0289333 A1) in view of Shaya Potter et al. (“WebPod: Persistent Web Browsing Sessions with Pocketable Storage Devices” in proceedings of the ACM 14th international conference on world wide web, May 10, 2005, pp. 603-612; Hereafter Potter) and further in view of Nave et al. (US Pub. 2011/0157196 A1).
Potter was cited in the IDS filed on 09/14/2023
As per claim 1, Chan teaches the invention substantially as claimed including A system for synchronizing a state of a first instance of a software application executing on a first computing environment with a second instance of the software application to be executed on a second computing environment, the system comprising (Chan, Fig. 3, 312, 308, computing device 302A, 302B (as including first and second computing environment), 304A App state and 304B App state; Fig. 9B; [0045] lines 16-17, data synchronization among more than two computing devices; [0054] lines 6-10, The computing devices 302 can share application states (e.g., an application state 304A, an application state 304B, and an application state 304C, collectively as the "application states 304") for an application 306 directly amongst each other):
the first computing environment, comprising: a memory system, comprising a runtime memory and a persistent memory, that stores program code (Chan, Fig. 1, 130, 138 memory; Fig. 7, 720 memory; [0061] lines 2-4, the operational memory can be a portion of a volatile memory (e.g., random access memory or a processor cache) in the computing device that the computer application is running on; [0088] lines 1-4, memory 720 is or includes the main memory of the computing device 700. The memory 720 represents any form of random access memory (RAM), read-only memory (ROM), flash memory, the like, or a combination of such devices); and a processing system, comprising a processor, that receives the program code from the memory system and, in response to at least receiving the program code (Chan, Fig. 7, 710 processor, 770 code; [0051] lines 1-3, instructions on a tangible storage memory capable of being executed by a processor):
scans at least one of the runtime memory or the persistent memory to identify memory state information that is specific to the first instance of the software application (Chan, Fig. 8, 802, identify application data associated with a target application in a memory device of the computing device, 804 generate an application state of the target application based on the identified application data; Fig. 4, 400 application state, 402 application memory data (as memory state); [0061] lines 1-2, The application memory data 402 describes an operational state of an operational memory of the computer application; [0094] lines 6-12, The method 800 begins in step 802 to identify application data (e.g., gameplay state data in the case of a computer game application) associated with a target application in a memory device of the computing device. The application data can be associated with the first user profile; );
writes the memory state information to a data structure in a synchronization file stored in the memory system (Chan, Fig. 3, 302A computing device, APP state 304A; Fig. 4, 400 application state, 402 application memory data, 404, 406, 408 410 (as data structure); Fig. 1, 1st memory, 136 state synchronization; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900);
writes the execution state information to the data structure (Chan, Fig. 4, 400 application state; [0060] lines 1-14, The application state 400 of a computer application may include application memory data 402, application local storage data 404, hardware configuration data 406, user account configuration data 408, permission settings data 410, or any combination thereof. The application state 400 may also include other functional memory portions or configurations that is specific to a type of computer application. For example, when the application state 400 is configured to store a run-time state of a computer game (as execution state), the application state 400 can include game progress data, game control configuration, multimedia output configuration including display configuration and speaker configuration, network configuration, virtual character attribute data, virtual property data, virtual finance or accounting data, or any combination thereof); and
transmits the synchronization file to the second computing environment (Chan, Fig. 9B, [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0101] lines 1-10, FIG. 9B is a diagram illustrating an example system environment of implementing user devices (e.g., a first computing device 902B and a second computing device 904B) capable of sharing application states directly with each other, in accordance with various embodiments. The example system environment illustrates the first computing device 902B directly sharing its application state with the second computing device 904B. For example, this feature can be implemented by an app-share agent, such as the application share module 230, running within the user devices. The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900).
Chan fails to specifically teach locks the first instance of the software application preventing user inputs thereto and generation of a new instance thereof.
However, Potter teaches locks the first instance of the software application preventing user inputs thereto and generation of a new instance thereof (Potter, Page 603, Abstract, lines 1-20, We present WebPod, a portable system that enables mobile users to use the same persistent, personalized web browsing session on any Internet-enabled device. No matter what computer is being used, WebPod provides a consistent browsing session, maintaining all of a user’s plugins, bookmarks, browser web content, open browser windows, and browser configuration options and preferences. This is achieved by leveraging rapid improvements in capacity, cost, and size of portable storage devices. WebPod provides a virtualization and checkpoint/restart mechanism that decouples the browsing environment from the host, enabling web browsing sessions to be suspended to portable storage, carried around, and resumed from the storage device on another computer. WebPod virtualization also isolates web browsing sessions from the host, protecting the browsing privacy of the user and preventing malicious web content from damaging the host. We have implemented a Linux WebPod prototype and demonstrate its ability to quickly suspend and resume web browsing sessions, enabling a seamless web browsing experience for mobile users as they move among computers; Page 608, right Col, lines 7-17, To eliminate possible dependencies on low-level kernel details, WebPod’s checkpoint-restart mechanism requires processes to be suspended prior to being checkpointed. Suspending processes creates a quiescent state necessary to guarantee the correctness of the checkpointed image, and it also minimizes the amount of information that needs to be saved. As a representative example, consider the case of semaphore wait queues. Although semaphore values can be easily obtained and restored through well-known interfaces, saving and restoring the state of the wait queue involves the manipulation of kernel internals. However, by taking advantage of existing semantics which direct the kernel to release a process from a wait queue upon receipt of a signal, WebPod is able to empty the wait queues by suspending all processes, and therefore avoid having to save the state of the queue [Examiner noted: the webpage of browsing session is suspended for seamless web browsing experience for mobile users as they move among computers, therefore, locks the first instance of the software application preventing user inputs thereto and generation of a new instance thereof (i.e., due to suspended]).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan with Potter because Potter’s teaching of suspending (as locking) the web browsing sessions and resuming after synchronization would have provided Chan’s system with the advantage and capability to guarantee the correctness of the checkpointed image, and minimizes the amount of information that needs to be saved which improving the system performance and efficiency (see Potter, Page 608, right Col, lines 7-17, “guarantee the correctness of the checkpointed image, and it also minimizes the amount of information that needs to be saved”).
Chan and Potter fail to specifically teach intercepts render commands for the first instance of the software application via an operating system level system filter to identify execution state information that is specific to the first instance of the software application.
However, Nave teaches intercepts render commands for the first instance of the software application via an operating system level system filter to identify execution state information that is specific to the first instance of the software application (Nave, Fig. 1, 108 software application; Fig. 2, 216 interceptor; Fig. 10, 1004 intercept the command on the server, 1006 server saves the updated render state; [0035] lines 1-7, software application 108 is executed within a sandbox environment 118 on server 102. Sandbox environment 118 captures the graphics and audio commands generated by software application 108 and selectively redirects them to one of remote UIs 106.sub.1-106.sub.N via data communication network 104. This allows software application 108 to be displayed on the remote UI using the hardware of the remote UI (as synchronization); [0055] lines 11-12, software executing (as an operating system level system filter) on server 202 intercepts commands from game executable 210; [0060] lines 1-3, a video game that is executed within the context of the operating system; [0174] lines 1-4, Graphics libraries provide an API for querying the render state of a GPU. Sometimes, video games use this API to determine if a GPU is in a correct state or to determine whether to change the render state to a new state; [0155] line 7, re-render commands; [0177] The state block object captures the full current state of a GPU, including, for example, a current texture of stage; [0181] lines 1-7, a video game issues a command that updates a render state of a GPU on a server. Such commands may include, for example and without limitation, SetLight, SetMaterial, or the like. At step 1004, the command issued during step 1002 is intercepted. At step 1006, the server saves the updated render state of the GPU (as to intercept render commands for the first instance of the software application (i.e., Fig. 1, 108 software application) via an operating system level system filter (i.e., interceptor) to identify execution state information in order to displaying it on the remote UI (Fig. 1, 106); also see [0008] identifying and compressing repeated sequences of intercepted graphics commands, compressing at least one texture object associated with at least one graphics command, identifying and removing data associated with one or more of the intercepted graphics commands that is used to represent particles, identifying and removing intercepted graphics commands used to render objects that are less than a predetermined size, and replacing vertex changes associated with at least one intercepted graphics command with a matrix representative thereof).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan and Potter with Nave because Nave’s teaching of intercepting the rendering commands for determining the execution state (i.e., render state) would have provided Chan and Potter’s system with the advantage and capability to allow the system to manipulate graphics commands that are reduced in size as compared to the intercepted graphics commands, and transferring the manipulated graphics commands from the server to the client for rendering thereon which improving the system performance and efficiency (see Nave, Abstract).
As per claim 7, Chan, Potter and Nave teach the invention according to claim 1 above. Potter further teaches wherein the identified execution state information that is specific to the first instance of the software application comprises one or more of active window or sub window handles; open menus, tabs, toolbars, or ribbons; a current page; a current web page; characteristics of mouse selection; characteristics of keyboard selection; or characteristics of pen input (Potter, Page 603, Abstract, lines 1-20, We present WebPod, a portable system that enables mobile users to use the same persistent, personalized web browsing session on any Internet-enabled device. No matter what computer is being used, WebPod provides a consistent browsing session, maintaining all of a user’s plugins, bookmarks, browser web content, open browser windows, and browser configuration options and preferences. This is achieved by leveraging rapid improvements in capacity, cost, and size of portable storage devices. WebPod provides a virtualization and checkpoint/restart mechanism that decouples the browsing environment from the host, enabling web browsing sessions to be suspended to portable storage, carried around, and resumed from the storage device on another computer. WebPod virtualization also isolates web browsing sessions from the host, protecting the browsing privacy of the user and preventing malicious web content from damaging the host. We have implemented a Linux WebPod prototype and demonstrate its ability to quickly suspend and resume web browsing sessions, enabling a seamless web browsing experience for mobile users as they move among computers).
As per claim 9, Chan, Potter and Nave teach the invention according to claim 1 above. Chan further teaches wherein the processing system captures application agnostic state information and writes the application agnostic state information to the data structure (Chan, Fig. 4, 400 application state; [0060] lines 1-14, The application state 400 of a computer application may include application memory data 402, application local storage data 404, hardware configuration data 406, user account configuration data 408, permission settings data 410, or any combination thereof. The application state 400 may also include other functional memory portions or configurations that is specific to a type of computer application. For example, when the application state 400 is configured to store a run-time state of a computer game, the application state 400 can include game progress data, game control configuration, multimedia output configuration including display configuration (as agnostic state information) and speaker configuration, network configuration, virtual character attribute data, virtual property data, virtual finance or accounting data, or any combination thereof).
As per claim 10, Chan, Potter and Nave teach the invention according to claim 9 above. Potter further teaches wherein the application agnostic state information comprises at least one of mouse cursor properties; keyboard cursor properties; window display properties; or opened uniform resource locators (URL) (Potter, Page 603, Abstract, lines 1-20, We present WebPod, a portable system that enables mobile users to use the same persistent, personalized web browsing session on any Internet-enabled device. No matter what computer is being used, WebPod provides a consistent browsing session, maintaining all of a user’s plugins, bookmarks, browser web content, open browser windows, and browser configuration options and preferences. This is achieved by leveraging rapid improvements in capacity, cost, and size of portable storage devices. WebPod provides a virtualization and checkpoint/restart mechanism that decouples the browsing environment from the host, enabling web browsing sessions to be suspended to portable storage, carried around, and resumed from the storage device on another computer. WebPod virtualization also isolates web browsing sessions from the host, protecting the browsing privacy of the user and preventing malicious web content from damaging the host. We have implemented a Linux WebPod prototype and demonstrate its ability to quickly suspend and resume web browsing sessions, enabling a seamless web browsing experience for mobile users as they move among computers).
As per claim 12, Chan, Potter and Nave teach the invention according to claim 1 above. Chan further teaches wherein the first computing environment comprises a local computing device, a virtual cloud computing machine, or a container, and the second computing environment comprises a local computing device, a virtual cloud computing machine, or a container (Chan, Fig. 9B, 902B (as first computing environment comprises a local computing device); 904B (as the second computing environment comprises a local computing device)).
As per claim 13, Chan teaches the invention substantially as claimed including A method for synchronizing a state of a first instance of a software application executing on a first computing environment with a second instance of the software application to be executed on a second computing environment, the method comprising: (Chan, Fig. 3, 312, 308, computing device 302A, 302B (as including first and second computing environment), 304A App state and 304B App state; Fig. 9B; [0045] lines 16-17, data synchronization among more than two computing devices; [0054] lines 6-10, The computing devices 302 can share application states (e.g., an application state 304A, an application state 304B, and an application state 304C, collectively as the "application states 304") for an application 306 directly amongst each other):
writes the execution state information to the data structure (Chan, Fig. 4, 400 application state; [0060] lines 1-14, The application state 400 of a computer application may include application memory data 402, application local storage data 404, hardware configuration data 406, user account configuration data 408, permission settings data 410, or any combination thereof. The application state 400 may also include other functional memory portions or configurations that is specific to a type of computer application. For example, when the application state 400 is configured to store a run-time state of a computer game (as execution state), the application state 400 can include game progress data, game control configuration, multimedia output configuration including display configuration and speaker configuration, network configuration, virtual character attribute data, virtual property data, virtual finance or accounting data, or any combination thereof); and
transmits the synchronization file to the second computing environment (Chan, Fig. 9B, [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0101] lines 1-10, FIG. 9B is a diagram illustrating an example system environment of implementing user devices (e.g., a first computing device 902B and a second computing device 904B) capable of sharing application states directly with each other, in accordance with various embodiments. The example system environment illustrates the first computing device 902B directly sharing its application state with the second computing device 904B. For example, this feature can be implemented by an app-share agent, such as the application share module 230, running within the user devices. The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900).
Chan fails to specifically teach locking the first instance of the software application executing in the first computing environment preventing user inputs thereto and generation of a new instance thereof.
However, Potter teaches locking the first instance of the software application executing in the first computing environment preventing user inputs thereto and generation of a new instance thereof (Potter, Page 603, Abstract, lines 1-20, We present WebPod, a portable system that enables mobile users to use the same persistent, personalized web browsing session on any Internet-enabled device. No matter what computer is being used, WebPod provides a consistent browsing session, maintaining all of a user’s plugins, bookmarks, browser web content, open browser windows, and browser configuration options and preferences. This is achieved by leveraging rapid improvements in capacity, cost, and size of portable storage devices. WebPod provides a virtualization and checkpoint/restart mechanism that decouples the browsing environment from the host, enabling web browsing sessions to be suspended to portable storage, carried around, and resumed from the storage device on another computer. WebPod virtualization also isolates web browsing sessions from the host, protecting the browsing privacy of the user and preventing malicious web content from damaging the host. We have implemented a Linux WebPod prototype and demonstrate its ability to quickly suspend and resume web browsing sessions, enabling a seamless web browsing experience for mobile users as they move among computers; Page 608, right Col, lines 7-17, To eliminate possible dependencies on low-level kernel details, WebPod’s checkpoint-restart mechanism requires processes to be suspended prior to being checkpointed. Suspending processes creates a quiescent state necessary to guarantee the correctness of the checkpointed image, and it also minimizes the amount of information that needs to be saved. As a representative example, consider the case of semaphore wait queues. Although semaphore values can be easily obtained and restored through well-known interfaces, saving and restoring the state of the wait queue involves the manipulation of kernel internals. However, by taking advantage of existing semantics which direct the kernel to release a process from a wait queue upon receipt of a signal, WebPod is able to empty the wait queues by suspending all processes, and therefore avoid having to save the state of the queue [Examiner noted: the webpage of browsing session is suspended for seamless web browsing experience for mobile users as they move among computers, therefore, locks the first instance of the software application preventing user inputs thereto and generation of a new instance thereof (i.e., due to suspended]).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan with Potter because Potter’s teaching of suspending (as locking) the web browsing sessions and resuming after synchronization would have provided Chan’s system with the advantage and capability to guarantee the correctness of the checkpointed image, and minimizes the amount of information that needs to be saved which improving the system performance and efficiency (see Potter, Page 608, right Col, lines 7-17, “guarantee the correctness of the checkpointed image, and it also minimizes the amount of information that needs to be saved”).
Chan and Potter fail to specifically teach intercepting render commands for the first instance of the software application via an operating system level system filter to identify execution state information that is specific to the first instance of the software application.
However, Nave teaches intercepting render commands for the first instance of the software application via an operating system level system filter to identify execution state information that is specific to the first instance of the software application (Nave, Fig. 1, 108 software application; Fig. 2, 216 interceptor; Fig. 10, 1004 intercept the command on the server, 1006 server saves the updated render state; [0035] lines 1-7, software application 108 is executed within a sandbox environment 118 on server 102. Sandbox environment 118 captures the graphics and audio commands generated by software application 108 and selectively redirects them to one of remote UIs 106.sub.1-106.sub.N via data communication network 104. This allows software application 108 to be displayed on the remote UI using the hardware of the remote UI (as synchronization); [0055] lines 11-12, software executing (as an operating system level system filter) on server 202 intercepts commands from game executable 210; [0060] lines 1-3, a video game that is executed within the context of the operating system; [0174] lines 1-4, Graphics libraries provide an API for querying the render state of a GPU. Sometimes, video games use this API to determine if a GPU is in a correct state or to determine whether to change the render state to a new state; [0155] line 7, re-render commands; [0177] The state block object captures the full current state of a GPU, including, for example, a current texture of stage; [0181] lines 1-7, a video game issues a command that updates a render state of a GPU on a server. Such commands may include, for example and without limitation, SetLight, SetMaterial, or the like. At step 1004, the command issued during step 1002 is intercepted. At step 1006, the server saves the updated render state of the GPU (as to intercept render commands for the first instance of the software application (i.e., Fig. 1, 108 software application) via an operating system level system filter (i.e., interceptor) to identify execution state information in order to displaying it on the remote UI (Fig. 1, 106); also see [0008] identifying and compressing repeated sequences of intercepted graphics commands, compressing at least one texture object associated with at least one graphics command, identifying and removing data associated with one or more of the intercepted graphics commands that is used to represent particles, identifying and removing intercepted graphics commands used to render objects that are less than a predetermined size, and replacing vertex changes associated with at least one intercepted graphics command with a matrix representative thereof).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan and Potter with Nave because Nave’s teaching of intercepting the rendering commands for determining the execution state (i.e., render state) would have provided Chan and Potter’s system with the advantage and capability to allow the system to manipulate graphics commands that are reduced in size as compared to the intercepted graphics commands, and transferring the manipulated graphics commands from the server to the client for rendering thereon which improving the system performance and efficiency (see Nave, Abstract).
As per claim 14, Chan, Potter and Nave teach the invention according to claim 13 above. Chan further teaches scanning at least one of the runtime memory or the persistent memory to identify memory state information that is specific to the first instance of the software application (Chan, Fig. 8, 802, identify application data associated with a target application in a memory device of the computing device, 804 generate an application state of the target application based on the identified application data; Fig. 4, 400 application state, 402 application memory data (as memory state); [0061] lines 1-2, The application memory data 402 describes an operational state of an operational memory of the computer application; [0094] lines 6-12, The method 800 begins in step 802 to identify application data (e.g., gameplay state data in the case of a computer game application) associated with a target application in a memory device of the computing device. The application data can be associated with the first user profile; ); and
writing the memory state information to the data structure in the synchronization file stored in the memory system for said transmits the synchronization file to the second computing environment. (Chan, Fig. 3, 302A computing device, APP state 304A; Fig. 4, 400 application state, 402 application memory data, 404, 406, 408 410 (as data structure); Fig. 1, 1st memory, 136 state synchronization; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900; Fig. 9B).
Claim 2 is rejected under 35 U.S.C. 103 as being unpatentable over Chan, Potter and Nave, as applied to claim 1 above, and further in view of Chaudhri (US Pub. 2023/0216861 A1).
As per claim 2, Chan, Potter and Nave teach the invention according to claim 1 above. Potter teaches the state synchronization of the software application is in progress in conjunction with locking the first instance of the software application (Potter, Page 603, Abstract, lines 1-20, We present WebPod, a portable system that enables mobile users to use the same persistent, personalized web browsing session on any Internet-enabled device. No matter what computer is being used, WebPod provides a consistent browsing session, maintaining all of a user’s plugins, bookmarks, browser web content, open browser windows, and browser configuration options and preferences. This is achieved by leveraging rapid improvements in capacity, cost, and size of portable storage devices. WebPod provides a virtualization and checkpoint/restart mechanism that decouples the browsing environment from the host, enabling web browsing sessions to be suspended to portable storage, carried around, and resumed from the storage device on another computer. WebPod virtualization also isolates web browsing sessions from the host, protecting the browsing privacy of the user and preventing malicious web content from damaging the host. We have implemented a Linux WebPod prototype and demonstrate its ability to quickly suspend and resume web browsing sessions, enabling a seamless web browsing experience for mobile users as they move among computers; Page 608, right Col, lines 7-17, To eliminate possible dependencies on low-level kernel details, WebPod’s checkpoint-restart mechanism requires processes to be suspended prior to being checkpointed. Suspending processes creates a quiescent state necessary to guarantee the correctness of the checkpointed image, and it also minimizes the amount of information that needs to be saved).
Chan, Potter and Nave fail to specifically teach wherein the processing system displays a screen indicating that the state synchronization of the software application is in progress.
However, Chaudhri teaches wherein the processing system displays a screen indicating that the state synchronization of the software application is in progress (Chaudhri, Fig. 8, GUI, syncing; [0022] lines 1-3, FIG. 8 is a diagrammatic illustration of the MAgent graphical user interface (GUI) showing the File service in the synchronization state with a file transfer in progress in accordance with yet another embodiment).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with Chaudhri because Chaudhri’s teaching of a GUI that indicating the synchronization progress would have provided Chan, Potter and Nave’s system with the advantage and capability to allow the user to easily understanding the synchronization progress in order to improving the user experience.
Claims 3-4 are rejected under 35 U.S.C. 103 as being unpatentable over Chan, Potter and Nave, as applied to claim 1 above, and further in view of XU et al. (US Pub. 2015/0186370 A1).
As per claim 3, Chan, Potter and Nave teach the invention according to claim 1 above. Chan further taches wherein further in response to said at least receiving the program code, the processing system: locates data files specific to the first instance of the software application in the persistent memory, wherein the located data files store at least one of version information of the first instance of the software application, installation information, configuration information, dependent component information, user identity information, or access token information (Chan, Fig. 4, application state, 406 hardware configuration data; [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as include data files) and synchronized between the computing devices); [0059] lines 1-10, one or more modules of the operating system of the computing device are responsible for organizing, monitoring, and synchronizing the application state 400. Such modules can run in the computing devices as background services or programs. The computer applications can be developed without any code dedicated to the organization, monitoring, or synchronization of the application state data. The application state data maintained by the operating system includes sufficient information for the operating system to restore a previous snapshot of the application state 400 specified by the application state data (as including locates data files specific to the first instance of the software application in order to restoring)).
Chan, Potter and Nave fail to specifically teach in response to determining that a first data file of the located data files does not match a corresponding second data file on the second computing environment, copies a difference of information between the first data file and the second data file; and transmits the difference of information to the second computing environment for state synchronization; or in response to determining that information from the located data files cannot be transmitted to the second computing environment: auto-remediates by determining an available port in the second computing environment, switching to a same port on the first computing environment, and transmitting the difference of information to the second computing environment via the available port for state synchronization; causes manual-remediation by sending a message to a user with instructions for opening a particular port in the second computing environment, and transmitting the difference of information to the second computing environment via the particular port for state synchronization; or halts the state synchronization of the first instance of the software application.
However, XU teaches in response to determining that a first data file of the located data files does not match a corresponding second data file on the second computing environment, copies a difference of information between the first data file and the second data file; and transmits the difference of information to the second computing environment for state synchronization; or in response to determining that information from the located data files cannot be transmitted to the second computing environment: auto-remediates by determining an available port in the second computing environment, switching to a same port on the first computing environment, and transmitting the difference of information to the second computing environment via the available port for state synchronization; causes manual-remediation by sending a message to a user with instructions for opening a particular port in the second computing environment, and transmitting the difference of information to the second computing environment via the particular port for state synchronization; or halts the state synchronization of the first instance of the software application (XU, Fig. 26, 2602, 2604, 2606, 2608 generate a difference based on the first view, the second view, and the first file set, 2610, 2612 compare the first view and the second view, 2618 transfer the difference to the destination; [0226] A first view of the first file set is generated (2604). A V(T) is generated at the source side (e.g., by the data transport system 104); [0227] A second view of a second file set of a second plurality of files is received from a destination (2606). The source side (e.g., the data transport system 104) receives a V(R) of a file set R from the destination side; [0229] generating a difference based on the first view, the second view, and the first file set includes determining a sequence of operations based on the first view and the second view, the sequence of operations including one or more copy operations and one or more add operations (2610), identifying, from the first file set, data corresponding to the add operations (2614), and associating the data corresponding to the add operations with the sequence of operations (2616). Generating the difference .DELTA. (as including copies the difference) includes determining a sequence of COPY and ADD operations based on V(T) and V(R), identifying data (e.g., chunks of files) in T and not in R (and thus are the data to be added by the ADD operations), and associating the data with the difference A. As described above, the data transport system 104 uses V(T) and V(R) to determine a sequence of COPY and ADD operations, and fills the data parameters in the ADD operations with chunk data from T. The result of these steps is the difference .DELTA.).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with XU because XU’s teaching of determining the difference between the first view and second view (as determining does not match), generating the delta and transmit the delta to the destination would have provided Chan, Potter and Nave’s system with the advantage and capability to allow the system to minimizing the data to be transferred by only sending the difference which improving the system data transmission efficiency and performance.
As per claim 4, Chan, Potter and Nave teach the invention according to claim 1 above. Chan, Potter and Nave fail to specifically teach in response to determining that a file open in the first instance of the software application in the first computing environment is not synchronized in the second computing environment, transmitting the file to the second computing environment for synchronization.
However, XU teaches in response to determining that a file open in the first instance of the software application in the first computing environment is not synchronized in the second computing environment, transmitting the file to the second computing environment for synchronization (XU, [0003] Examples include file replication, disaster recovery, remote backup, file sharing and synchronizing; Fig. 26, 2602, 2604, 2606, 2608, 2610, 2612 compare the first view and the second view, 2618 transfer the difference to the destination; [0226] A first view of the first file set is generated (2604). A V(T) is generated at the source side (e.g., by the data transport system 104); [0227] A second view of a second file set of a second plurality of files is received from a destination (2606). The source side (e.g., the data transport system 104) receives a V(R) of a file set R from the destination side; [0229] generating a difference based on the first view, the second view, and the first file set includes determining a sequence of operations based on the first view and the second view, the sequence of operations including one or more copy operations and one or more add operations (2610), identifying, from the first file set, data corresponding to the add operations (2614), and associating the data corresponding to the add operations with the sequence of operations (2616). Generating the difference .DELTA. (as including copies the difference) includes determining a sequence of COPY and ADD operations based on V(T) and V(R), identifying data (e.g., chunks of files) in T and not in R (and thus are the data to be added by the ADD operations), and associating the data with the difference A. As described above, the data transport system 104 uses V(T) and V(R) to determine a sequence of COPY and ADD operations, and fills the data parameters in the ADD operations with chunk data from T. The result of these steps is the difference .DELTA.).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with XU because XU’s teaching of determining the difference between the first view and second view (as determining does not match), generating the delta and transmit the delta to the destination would have provided Chan, Potter and Nave’s system with the advantage and capability to allow the system to minimizing the data to be transferred by only sending the difference which improving the system data transmission efficiency and performance.
Claim 5 is rejected under 35 U.S.C. 103 as being unpatentable over Chan, Potter and Nave, as applied to claim 1 above, and further in view of Fukuda et al. (US Pub. 2009/0180138 A1) and Cheshire (US Pub. 2002/0099803 A1).
As per claim 5, Chan, Potter and Nave teach the invention according to claim 1 above. Chan further teaches synchronize at least a portion of a network configuration for the first instance of the software application stored in the run-time memory of the first computing environment to the second computing environment (Chan, Fig. 4, 400 application state; [0060] when the application state 400 is configured to store a run-time state of a computer game, the application state 400 can include game progress data, game control configuration, multimedia output configuration including display configuration and speaker configuration, network configuration, virtual character attribute data, virtual property data, virtual finance or accounting data, or any combination thereof; [0054] lines 6-10, The computing devices 302 can share application states (e.g., an application state 304A, an application state 304B, and an application state 304C, collectively as the "application states 304") for an application 306 directly amongst each other).
Chan, Potter and Nave fail to specifically teach determines a lack of ability to synchronize, wherein the network configuration comprises at least one of access to a uniform resource locator (URL) or availability of a network port; and auto-remediates the lack of ability to synchronize the at least a portion of the network configuration to the second computing environment; provides steps for performing manual remediation of the lack of ability to synchronize the at least a portion of the network configuration to the second computing environment via a user interface; or stops the state synchronization of the software application.
However, Fukuda teaches determines a lack of ability to synchronize and auto-remediates the lack of ability to synchronize the at least a portion of the network configuration to the second computing environment; provides steps for performing manual remediation of the lack of ability to synchronize the at least a portion of the network configuration to the second computing environment via a user interface; or stops the state synchronization of the software application (Fukuda, Fig. 7, S12 synchronization ok? No to end (as stop the state synchronization); [0007] synchronizing use restriction settings information that indicates use restriction settings for each user with other multifunction machines that are connected via a network; [0015] in the multifunction machine according to the present invention, the settings information may include operational settings information relating to operational settings of various functions for respective users; [0107] when a response indicating that synchronization is not possible is made from the synchronization target multifunction machine 1, a determination of "No" is made, and the synchronization/setting processing is ended).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with Fukuda because Fukuda’s teaching of stopping the synchronization when determination that synchronization is not possible is made would have provided Chan, Potter and Nave’s system with the advantage and capability to allow the system to preventing any potential errors due to the synchronization in order to improving the system performance and efficiency.
Chan, Potter, Nave and Fukuda fail to specifically teach wherein the network configuration comprises at least one of access to a uniform resource locator (URL) or availability of a network port.
However, Cheshire teaches wherein the network configuration comprises at least one of access to a uniform resource locator (URL) or availability of a network port (Cheshire, [0021] The network configuration protocol packet may include text information or uniform resource locator (URL) information together with the information necessary for network configuration).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter, Nave and Fukuda with Cheshire because Cheshire’s teaching of network configuration includes uniform resource locator (URL) information would have provided Chan, Potter, Nave and Fukuda’s system with the advantage and capability to allow the system to easily identifying and synchronization of the URL with other devices which improving the system performance and efficiency.
Claim 6 is rejected under 35 U.S.C. 103 as being unpatentable over Chan, Potter and Nave, as applied to claim 1 above, and further in view of ZHANG (US Pub. 2019/0361609 A1).
As per claim 6, Chan, Potter and Nave teach the invention according to claim 1 above. Chan further teaches wherein the processing system scans at least one of the runtime memory or the persistent memory to identify memory state information that is specific to the software application, and writes the memory state information to a data structure in a synchronization file stored in the memory system by (Chan, Fig. 8, 802, identify application data associated with a target application in a memory device of the computing device, 804 generate an application state of the target application based on the identified application data; Fig. 4, 400 application state, 402 application memory data (as memory state); [0061] lines 1-2, The application memory data 402 describes an operational state of an operational memory of the computer application; [0094] lines 6-12, The method 800 begins in step 802 to identify application data (e.g., gameplay state data in the case of a computer game application) associated with a target application in a memory device of the computing device. The application data can be associated with the first user profile; Fig. 3, 302A computing device, APP state 304A; Fig. 4, 400 application state, 402 application memory data, 404, 406, 408 410 (as data structure); Fig. 1, 1st memory, 136 state synchronization; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900);
identifying a first portion of the memory state information that is stored in the runtime memory and a second portion of the memory state information that is stored to the persistent memory (Chan, Fig. 4, 402 and 404; [0060] The application state 400 of a computer application may include application memory data 402, application local storage data 404, hardware configuration data 406, user account configuration data 408, permission settings data 410, or any combination thereof. The application state 400 may also include other functional memory portions or configurations that is specific to a type of computer application. For example, when the application state 400 is configured to store a run-time state of a computer game, the application state 400 can include game progress data, game control configuration, multimedia output configuration including display configuration and speaker configuration, network configuration, virtual character attribute data, virtual property data, virtual finance or accounting data, or any combination thereof; [0061] The application memory data 402 describes an operational state of an operational memory of the computer application. For example, the operational memory can be a portion of a volatile memory (e.g., random access memory or a processor cache) in the computing device that the computer application is running on. For another example, the operational memory can be a portion of a flash memory in the computing device. The operational memory dynamically evolves throughout the execution of the computer application. The application local storage data 404 represents certain data in a local storage of the computing device that the computer application running on. The application local storage data 404 can change based on specific instructions from the computer application to write to a persistent storage device. For example, the local storage can be a portion of a persistent storage device, such as a hard disk or a flash drive); and
capturing the memory state information for said write the memory state information by: capturing the first portion of the memory state information and capturing the second portion of the memory state information, and writing the captured first portion of the memory state information and the captured second portion of the memory state information to the data structure in the synchronization file; capturing the first portion of the memory state information and paging the first portion of the memory state information to the persistent memory according to the cold state format, capturing the first portion of the memory state information and the second portion of the memory state information from the persistent memory, and writing the captured first portion of the memory state information and the captured second portion of memory state information to the data structure in the synchronization file according to the cold state format; or un-paging the second portion of the memory state information stored in the cold state in persistent memory and storing the second portion of the memory state information in runtime memory according to the hot state format, capturing the first portion of the memory state information and the second portion of the memory state information from the runtime memory, and writing the captured first portion of the memory state information and the captured second portion of memory state information to the data structure in the synchronization file according to the hot state format (Chan, Fig. 4, 400 application state, 402 application memory data (as memory state); [0061] lines 1-2, The application memory data 402 describes an operational state of an operational memory of the computer application; [0094] lines 6-12, The method 800 begins in step 802 to identify application data (e.g., gameplay state data in the case of a computer game application) associated with a target application in a memory device of the computing device. The application data can be associated with the first user profile; Fig. 3, 302A computing device, APP state 304A; Fig. 4, 400 application state, 402 application memory data, 404, 406, 408 410 (as data structure); Fig. 1, 1st memory, 136 state synchronization; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900).
Chan, Potter and Nave fail to specifically teach a first portion of the memory state information that is stored in a hot state in the runtime memory and a second portion of the memory state information that is stored in a cold state paged to the persistent memory, and when capturing the first and second portions, it is according to a hot state format and a cold state format respectively.
However, ZHANG teaches a first portion of the memory state information that is stored in a hot state in the runtime memory and a second portion of the memory state information that is stored in a cold state paged to the persistent memory, and when capturing the first and second portions, it is according to a hot state format and a cold state format respectively (ZHANG, [0074] A service layer in the server stores a data to be stored in the hot data state, into a memory, and a RockDB storage engine stores a data to be stored in the cold data state, into a disk. In addition, a cold-hot data converting engine transfers the data, which has been converted from the hot data state to the cold data state, from the memory into the disk, and transfers the data, which has been converted from the cold data state to the hot data state; [0105] Since the data to be stored in the hot data state is stored in the memory and the data to be stored in the cold data state is stored in the disk, the system may be prevented from frequently accessing the disk, thereby providing large capacity throughput while providing data access with high throughput and low latency; [0111] The cold-hot data converting engine in the server stores the key in the cold data state into the disk, i.e., index information that is infrequently accessed is flushed to the disk in page.).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with ZHANG because ZHANG’s teaching of portion of the data stored in the hot state, and another portion is stored in the cold state paged would have provided Chan, Potter and Nave’s system with the advantage and capability to prevent from frequently accessing the disk, thereby providing large capacity throughput while providing data access with high throughput and low latency.
Claim 8 is rejected under 35 U.S.C. 103 as being unpatentable over Chan, Potter and Nave, as applied to claim 1 above, and further in view of Underwood et al. (US Pub. 2020/0257555 A1) and Chan (US Pub. 2021/0200697 A1; hereafter Chan ‘697’).
As per claim 8, Chan, Potter and Nave teach the invention according to claim 1 above. Chan further teaches wherein the processing system writes to the data structure for said transmitting the synchronization file to the second computing environment (Chan, Fig. 9B, [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0101] lines 1-10, FIG. 9B is a diagram illustrating an example system environment of implementing user devices (e.g., a first computing device 902B and a second computing device 904B) capable of sharing application states directly with each other, in accordance with various embodiments. The example system environment illustrates the first computing device 902B directly sharing its application state with the second computing device 904B. For example, this feature can be implemented by an app-share agent, such as the application share module 230, running within the user devices. The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900; [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900).
Chan, Potter and Nave fail to specifically teach wherein the processing system writes a last sequence of chained render commands to the data structure.
However, Underwood teaches wherein the processing system writes a last sequence of chained render commands to the data structure (Underwood, [0126] The (and each) command stream interface is operable to cause the graphics processor to execute a respective command stream that has been assigned to that command stream interface. Thus, a (and each) command stream interface can have associated with it (assigned to it) a command stream buffer storing a sequence of commands (a command stream) to be implemented).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with Underwood because Underwood’s teaching of writing the sequence of commands to the data structure would have provided Chan, Potter and Nave’s system with the advantage and capability to allow the system to minizine the transferring time which improving the system performance and efficiency.
Chan, Potter, Nave and Underwood fail to specifically teach does not write a first render command and a second render command to the data structure in instances where the second render command cancels an operation performed based on the first render command.
However, Chan ‘697’ teaches does not write a first render command and a second render command to the data structure in instances where the second render command cancels an operation performed based on the first render command (Chan ‘697’, Claim 13, determine that the first write command, the second write command, and the third write command write data to a same address of the memory device; and mark the first write command and the second write command as erroneous utilizing error circuitry responsive to determining that the first write command, the second write command, and the third write command write data to the same address of the memory device (as where the second render command cancels an operation performed based on the first render command; please note, render command was taught by Nave) and that the third write command is received after the first command and second write command; wherein the processing device is configured to delete the first write command and the second write command in response to the first write command and the second write command being marked as erroneous).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter, Nave and Underwood with Chan ‘697’ because Chan ‘697’’s teaching of removing (as does not write) the first and second command if the second command cancels the operation performed based on the first command would have provided Chan, Potter, Nave and Underwood’s system with the advantage and capability to preventing potential system errors due to the operations performed on the same address which improving the system reliability and performance.
Claim 11 is rejected under 35 U.S.C. 103 as being unpatentable over Chan, Potter and Nave, as applied to claim 1 above, and further in view of QUAN et al. (US Pub. 2015/0365463 A1).
As per claim 11, Chan, Potter and Nave teach the invention according to claim 1 above. Chan teaches writing at least one of memory state information, execution state information, or agnostic state information to the data structure in the synchronization file (Chan, Fig. 3, 302A computing device, APP state 304A; Fig. 4, 400 application state, 402 application memory data, 404, 406, 408 410 (as data structure); Fig. 1, 1st memory, 136 state synchronization; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900).
Chan, Potter and Nave fail to specifically teach when writing at least one of memory state information, execution state information, or agnostic state information to the data structure in the synchronization file, it is for any other software applications the software application depends on.
However, QUAN teaches when writing at least one of memory state information, execution state information, or agnostic state information to the data structure in the synchronization file, it is for any other software applications the software application depends on (QUAN, Fig. 3, 142 APP state information; [0003] an application management module may remove an application from the electronic device, and may store the application and associated data at a network-accessible storage location. Subsequently, when the user attempts to execute the application on the electronic device, the application may be executed remotely by a service computing device while the application is also downloaded to the electronic device. As one example, the service computing device may use an emulator to execute the application and send application execution data to the electronic device. For instance, the emulator may emulate execution of the application on the electronic device. The user may interact with the remotely executing application while the application is been downloaded and reinstalled on the electronic device. Application state information may be obtained from the remotely executing application and used to initiate execution of the application locally on the electronic device so that local execution may resume at a point at which remote execution left off (as execution state information that is for any other software applications the software application depends on (i.e., application that will be running in the client side).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan, Potter and Nave with QUAN because QUAN’s teaching of writing the application state that currently executed and for later sending it to client that allow the client application to resume would have provided Chan, Potter and Nave’s system with the advantage and capability to allow the system to executing the application without down time which improving the user experience and system performance.
Claims 15-20 are rejected under 35 U.S.C. 103 as being unpatentable over Chan et al. (US Pub. 2014/0289333 A1) in view of Allen et al. (US Pub. 2011/0153690 A1) and further in view of Adbo et al. (US Patent. 7,590,750 B2).
As per claim 15, Chan teaches the invention substantially as claimed including A system for synchronizing a state of a first instance of a software application executing on a first computing environment with a second instance of the software application to be executed on a second computing environment, the system comprising (Chan, Fig. 3, 312, 308, computing device 302A, 302B (as including first and second computing environment), 304A App state and 304B App state; Fig. 9B; [0045] lines 16-17, data synchronization among more than two computing devices; [0054] lines 6-10, The computing devices 302 can share application states (e.g., an application state 304A, an application state 304B, and an application state 304C, collectively as the "application states 304") for an application 306 directly amongst each other):
the second computing environment comprising: a memory system, comprising a runtime memory and a persistent memory, that stores program code (Chan, Fig. 1, 130, 138 memory; Fig. 7, 720 memory; [0061] lines 2-4, the operational memory can be a portion of a volatile memory (e.g., random access memory or a processor cache) in the computing device that the computer application is running on; [0088] lines 1-4, memory 720 is or includes the main memory of the computing device 700. The memory 720 represents any form of random access memory (RAM), read-only memory (ROM), flash memory, the like, or a combination of such devices); and a processing system, comprising a processor, that receives the program code from the memory system and, in response to at least receiving the program code: (Chan, Fig. 7, 710 processor, 770 code; [0051] lines 1-3, instructions on a tangible storage memory capable of being executed by a processor):
receives a synchronization file of the first instance of the software application, the synchronization file including a data structure having memory state information and execution state information therein that is specific to the first instance of the software application executing on the first computing environment (Chan, Fig. 9B, [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files (as synchronization file) and synchronized between the computing devices); [0061] lines 1-2, The application memory data 402 describes an operational state of an operational memory of the computer application; [0060] lines 1-14, The application state 400 of a computer application may include application memory data 402, application local storage data 404, hardware configuration data 406, user account configuration data 408, permission settings data 410, or any combination thereof. The application state 400 may also include other functional memory portions or configurations that is specific to a type of computer application. For example, when the application state 400 is configured to store a run-time state of a computer game (as execution state); [0101] lines 1-10, FIG. 9B is a diagram illustrating an example system environment of implementing user devices (e.g., a first computing device 902B and a second computing device 904B) capable of sharing application states directly with each other, in accordance with various embodiments. The example system environment illustrates the first computing device 902B directly sharing its application state with the second computing device 904B. For example, this feature can be implemented by an app-share agent, such as the application share module 230, running within the user devices. The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900).
write the memory state information to at least one of the runtime memory or the persistent memory at a respective location; (Chan, Fig. 3, computing device 302B, App state 304B; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files and synchronized between the computing devices); [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0101] lines 10-13, The app-share agent in the user devices can serve the functionalities of the app state broker agent 908 of the application sharing system 900);
initiate execution of the second instance of the software application on the second computing environment (Chan, [0080] Upon receiving the instance of the application state, the app-share agent configures, in step 606, the target application with the instance of the application state for executing on an operating system of the computing device);
update, at an operating system level, said update performed subsequent to said initiate execution of the second instance of the software application (Chan, [0074] the application state broker system 502 can configure whether the sharing copy is sharable to a third computing device. As another example, the application state broker system 502 can configure whether new application data, generated after executing the sharing copy of the target application, is to re-integrate with the application data of the application state associated with the user profile A in the application state storage 504. The application state broker system 504 can further configure whether new application data, generated after executing the sharing copy of the target application, is to synchronize to a new application state associated with the user profile B in the application state storage 504. The new application state can also be associated with the user profile A as well. In embodiments, the application state broker system 504 can configure the sharing copy as a session-only instance of the target application that expires in accordance with a schedule or a condition that can be met while executing the session-only instance (as to update based on the execution); and
synchronize the second instance of the software application to the execution state information (Chan, Fig. 3, app state shared between different computing devices; Fig. 9B; [0074] the application state broker system 502 can configure whether the sharing copy is sharable to a third computing device. As another example, the application state broker system 502 can configure whether new application data, generated after executing the sharing copy of the target application, is to re-integrate with the application data of the application state associated with the user profile A in the application state storage 504. The application state broker system 504 can further configure whether new application data, generated after executing the sharing copy of the target application, is to synchronize to a new application state associated with the user profile B in the application state storage 504. The new application state can also be associated with the user profile A as well. In embodiments, the application state broker system 504 can configure the sharing copy as a session-only instance of the target application that expires in accordance with a schedule or a condition that can be met while executing the session-only instance (as to update based on the execution).
Chan fails to specifically teach the memory state information having a respective first memory pointer pointing thereto, and when updating, it is a second memory pointer associated with the second instance of the software application to the respective first memory pointer.
However, Allen teaches the memory state information having a respective first memory pointer pointing thereto, and when updating, it is a second memory pointer associated with the second instance of the software application to the respective first memory pointer (Allen, [0050] A pointer update message format 312 includes an address of pointer field 306 identical to that described above. The pointer update message format 312 further includes a pointer value field 314. As such, the pointer update message format 312 may be used to indicate, as described above, an address of a pointer and a value to be associated with that pointer for both newly-created pointers and for updated pointers. The pointer update message format 312 also includes the message type field 308 described above. The message type field 308 may include, for purposes of the present example, a value of "01" binary to represent that the message was formed using the pointer update message format 312; [0023] coprocessor may create one or more (e.g., multiple) memory pointer elements for a given memory allocation header element in response to multiple pointer update messages received from the main processor. The coprocessor may further update previously created memory pointer elements in response to pointer update messages that reference storage addresses of previously created pointers in the main memory. As such, memory pointer elements may be both created and updated with a new value using pointer update messages sent to the coprocessor from the main processor).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan with Allen because Allen’s teaching of updating the second memory pointer with the first memory pointer would have provided Chan’s system with the advantage and capability to allow the system to ensuring the correctness of the memory pointer in order to preventing any potential system errors which improving the system reliability and performance.
Chan and Allen fail to specifically teach when synchronize the second instance of the software application to the execution state information, it including altering at least one user interface element associated with the second instance of the software application.
However, Adbo teaches when synchronize the second instance of the software application to the execution state information, it including altering at least one user interface element associated with the second instance of the software application (Adbo, claim 8, tracking, at the server, user initiated changes to a window display geometry and a position of the first media application window and the second media application window on the remote desktop, including tracking of a clipping of the first media application window by the second media application window; relaying to the remote desktop changes in the relative window position of the first and the second media presentation target window relative to changes in the relative window position of the respective first and second media application window such that the first media application window on the client is synchronized with the first media application window on the server).
It would have been obvious to one having ordinary skill in the art before the effective filling date of the claimed invention to have combined the teaching of Chan and Allen with Adbo because Adbo’s teaching of window position synchronization between client and server would have provided Chan and Allen’s system with the advantage and capability to improving the user experience and system efficiency.
As per claim 16, Chan, Allen and Adbo teach the invention according to claim 15 above. Chan further teaches wherein state information specific to the first instance of the software application is synchronized in the second computing environment relative to the first computing environment, and wherein the synchronized state information includes at least one of version information of the first instance of the software application, installation information, configuration information, dependent component information, user identity information, or access token information stored in the persistent memory, files to be opened in the second instance of the software application, and a network configuration for the second instance of the software application stored in the run-time memory of the second computing environment. (Chan, Fig. 4, application state, 406 hardware configuration data; [0080] lines 8-10, the app-share agent can back up the current instance of the application state in sub step 608. For example, the current instance can be stored locally on the computing device; [0058] lines 1-7, FIG. 4 is a block diagram of an example of an application state 400 of a computer application (e.g., one of the computer applications 134, 144, or 244), in accordance with various embodiments…For instance, application state data can be organized as files and synchronized between the computing devices); [0059] lines 1-10, one or more modules of the operating system of the computing device are responsible for organizing, monitoring, and synchronizing the application state 400. Such modules can run in the computing devices as background services or programs. The computer applications can be developed without any code dedicated to the organization, monitoring, or synchronization of the application state data. The application state data maintained by the operating system includes sufficient information for the operating system to restore a previous snapshot of the application state 400 specified by the application state data)).
As per claim 17, Chan, Allen and Adbo teach the invention according to claim 15 above. Adbo further teaches wherein the processing system synchronizes the second instance of the software application to the execution state information including altering at least one user interface element associated with the second instance of the software application by executing, in the second computing environment, render commands that are based on the execution state information, wherein the at least one user interface element associated with the second instance of the software application comprises at least one of active window or sub window handles; open menus, tabs, toolbars, or ribbons; a current page; a current web page; characteristics of mouse selection; characteristics of keyboard selection; or characteristics of pen input (Adbo, Fig. 2, Fig. 3, Fig. 4; window application synchronization (media player window); Col 2, lines 60-62, media presentation 302 corresponds to a media presentation window or video render window which is situated within the media player window; Claim 8, a user-interface component including a first and a second media application window from a server to a remote client during a terminal services session; streaming a first and a second media component for presentation in a respective first and second media presentation target window on the remote desktop in combination with the user-interface component, wherein the streaming occurs in the terminal services session; tracking, at the server, user initiated changes to a window display geometry and a position of the first media application window and the second media application window on the remote desktop, including tracking of a clipping of the first media application window by the second media application window; relaying to the remote desktop changes in the relative window position of the first and the second media presentation target window relative to changes in the relative window position of the respective first and second media application window such that the first media application window on the client is synchronized with the first media application window on the server; relaying to the remote client changes in the relative window geometry of the first and the second media presentation target window relative to changes in the relative window geometry of the respective first and second media application window such that the second media application window on the client is synchronized with the second media application window on the server; and streaming a new first and a new second media component from the server to the remote desktop with a changed window display geometry and position corresponding to the user initiated changes for presentation on the remote client in combination with the respective changed first and second media application window without ever presenting the media component in a format for display within the first or the second media presentation window on the server).
As per claim 18, Chan, Allen and Adbo teach the invention according to claim 15 above. Chan further teaches wherein the data structure further includes agnostic state information therein that is agnostic relative to the first instance of the software application, and the processing system synchronizes the second instance of the software application in the second computing environment to the agnostic state information (Chan, Fig. 4, 400 application state; [0060] lines 1-14, The application state 400 of a computer application may include application memory data 402, application local storage data 404, hardware configuration data 406, user account configuration data 408, permission settings data 410, or any combination thereof. The application state 400 may also include other functional memory portions or configurations that is specific to a type of computer application. For example, when the application state 400 is configured to store a run-time state of a computer game, the application state 400 can include game progress data, game control configuration, multimedia output configuration including display configuration (as agnostic state information) and speaker configuration, network configuration, virtual character attribute data, virtual property data, virtual finance or accounting data, or any combination thereof).
As per claim 19, Chan, Allen and Adbo teach the invention according to claim 18 above. Adbo further teaches wherein the agnostic state information comprises at least one of mouse cursor properties; keyboard cursor properties; window display properties; or uniform resource locators (URL) (Adbo, Claim 8, user initiated changes to a window display geometry and a position of the first media application window and the second media application window on the remote desktop, including tracking of a clipping of the first media application window by the second media application window; relaying to the remote desktop changes in the relative window position of the first and the second media presentation target window relative to changes in the relative window position of the respective first and second media application window such that the first media application window on the client is synchronized with the first media application window on the server; relaying to the remote client changes in the relative window geometry of the first and the second media presentation target window relative to changes in the relative window geometry of the respective first and second media application window such that the second media application window on the client is synchronized with the second media application window on the server; and streaming a new first and a new second media component from the server to the remote desktop with a changed window display geometry and position corresponding to the user initiated changes for presentation on the remote client in combination with the respective changed first and second media application window without ever presenting the media component in a format for display within the first or the second media presentation window on the server).
As per claim 20, Chan, Allen and Adbo teach the invention according to claim 18 above. Adbo further teaches wherein the processing system synchronizes the second instance of the software application in the second computing environment to the agnostic state information by applying window display properties of the agnostic state information in the second computing environment including at least one of window position, size, focus, z-order, dots-per-inch aware window x, y coordinates, width, or height. (Adbo, Claim 8, user initiated changes to a window display geometry and a position of the first media application window and the second media application window on the remote desktop, including tracking of a clipping of the first media application window by the second media application window; relaying to the remote desktop changes in the relative window position of the first and the second media presentation target window relative to changes in the relative window position of the respective first and second media application window such that the first media application window on the client is synchronized with the first media application window on the server; relaying to the remote client changes in the relative window geometry of the first and the second media presentation target window relative to changes in the relative window geometry of the respective first and second media application window such that the second media application window on the client is synchronized with the second media application window on the server; and streaming a new first and a new second media component from the server to the remote desktop with a changed window display geometry and position corresponding to the user initiated changes for presentation on the remote client in combination with the respective changed first and second media application window without ever presenting the media component in a format for display within the first or the second media presentation window on the server).
Conclusion
Any inquiry concerning this communication or earlier communications from the examiner should be directed to ZUJIA XU whose telephone number is (571)272-0954. The examiner can normally be reached M-F 9:30-5:30 EST.O
Examiner interviews are available via telephone, in-person, and video conferencing using a USPTO supplied web-based collaboration tool. To schedule an interview, applicant is encouraged to use the USPTO Automated Interview Request (AIR) at http://www.uspto.gov/interviewpractice.
If attempts to reach the examiner by telephone are unsuccessful, the examiner’s supervisor, Aimee J Li can be reached at (571) 272-4169. The fax phone number for the organization where this application or proceeding is assigned is 571-273-8300.
Information regarding the status of published or unpublished applications may be obtained from Patent Center. Unpublished application information in Patent Center is available to registered users. To file and manage patent submissions in Patent Center, visit: https://patentcenter.uspto.gov. Visit https://www.uspto.gov/patents/apply/patent-center for more information about Patent Center and https://www.uspto.gov/patents/docx for information about filing in DOCX format. For additional questions, contact the Electronic Business Center (EBC) at 866-217-9197 (toll-free). If you would like assistance from a USPTO Customer Service Representative, call 800-786-9199 (IN USA OR CANADA) or 571-272-1000.
/ZUJIA XU/Examiner, Art Unit 2195