This application relates to data streaming and managing the writing of datasets.
Current data streaming methods enable a computer user to view of listen to a portion of video or music data file while downloading subsequent portions of file. However, existing streaming methods cannot be used to download, or otherwise install an interactive software application, such as a computer game, where the entire application must be downloaded to the user's computer before the game can be played.
The following description and drawings set forth certain illustrative implementations of the disclosure in detail, which are indicative of several exemplary ways in which the various principles of the disclosure may be carried out. The illustrative examples, however, are not exhaustive of the many possible embodiments of the disclosure. Other objects, advantages and novel features of the disclosure will be set forth in the following detailed description of the disclosure when considered in conjunction with the drawings.
In an aspect, the invention is directed to a computer-implemented method comprising: receiving, by a client device, a request to retrieve a computer software application from a data storage device in network communication with the client device, the computer software application including (1) a set of core files including a core file executable and (2) at least a first and/or other data file or files that can be used by the core file executable; creating, by the client device, a first and/or other data placeholder file in place of the first and/or other data file or files; and installing, by the client device, the set of core files including the core file executable and at least the first and/or other data file or files.
In one or more embodiments, the computer software application includes the first and the other data files, and the method further comprises: creating, by the client device, the first and the other data placeholder files in place of the first and the other data files; and installing, by the client device, the set of core files including the core file executable and the first and the other data placeholder files. In one or more embodiments, the method further comprises: receiving, by the client device, a request from the computer software application for first data from the first data file; determining, by the client device, that the first data file is not stored locally on the client device; and obtaining the first data file from the data storage device.
In one or more embodiments, an existence of the first placeholder file on the client device indicates that the first data file is not stored locally on the client device. In one or more embodiments, the method further comprises automatically generating, by the computer software application, the request for the first data in response to a user's interaction with the computer software application. In one or more embodiments, the user's interaction with the computer software application includes a user's request to install a supplemental feature or functionality for the computer software application.
In one or more embodiments, the method further comprises executing, on the client device, at least the core file executable; while executing the at least the core file executable, receiving, by the client device, a request from the computer software application for second data; determining, by the client device, that the second data are not present on the client device; and obtaining a second data file from the data storage device, the second data file including the second data. In one or more embodiments, the method further comprises determining, by the client device, that the second data are not present in a second data placeholder file stored on the client device.
In one or more embodiments, the second data placeholder file corresponds to or is associated with the second data file. In one or more embodiments, the method further comprises automatically generating, by the computer software application, the request for the second data in response to a user's interaction with the computer software application.
Another aspect of the invention is directed to a computer program product comprising: a non-transitory, computer-readable storage medium; and computer-readable program code embodied in the computer-readable storage medium, wherein the computer-readable program code is configured to: receive, by a client device, a request to retrieve a computer software application from a data storage device in network communication with the client device, the computer software application including (1) a set of core files including a core file executable and (2) at least a first and/or other data file or files that can be used by the core file executable; create, by the client device, a first and/or other data placeholder file in place of the first and/or other data file or files; and install, by the client device, the set of core files including the core file executable and at least the first and/or other data file or files.
In one or more embodiments, the computer software application includes the first and the other data files and the computer-readable program code is further configured to: create, by the client device, the first and the other data placeholder files in place of the first and the other data files; and install, by the client device, the set of core files including the core file executable and the first and the other data placeholder files. In one or more embodiments, the computer-readable program code is further configured to: receive, by the client device, a request from the computer software application for first data from the first data file; determine, by the client device, that the first data are not present in the first data placeholder file; and obtain the first data file from the data storage device. In one or more embodiments, an existence of the first placeholder file on the client device indicates that the first data file is not stored locally on the client device.
In one or more embodiments, the computer-readable program code is further configured to automatically generate, by the computer software application, the request for the first data in response to a user's interaction with the computer software application. In one or more embodiments, the user's interaction with the computer software application includes a user's request to install a supplemental feature or functionality for the computer software application. In one or more embodiments, the computer-readable program code is further configured to: execute, on the client device, at least the core file executable; while executing the at least the core file executable, receive, by the client device, a request from the computer software application for second data; determine, by the client device, that the second data are not present on the client device; and obtain a second data file from the data storage device, the second data file including the second data.
In one or more embodiments, the computer-readable program code is further configured to determine, by the client device, that the second data are not present in a second data placeholder file stored on the client device. In one or more embodiments, the second data placeholder file corresponds to or is associated with the second data file. In one or more embodiments, the computer-readable program code is further configured to automatically generate, by the computer software application, the request for the second data in response to a user's interaction with the computer software application.
Other features and advantages of the invention will be apparent from the following detailed description, from the drawings, and from the claims.
The invention will be understood and appreciated more fully from the following detailed description taken in conjunction with the appended drawings in which:
The invention is now described within the context of one or more preferred embodiments, although the description is intended to be illustrative of the invention as a whole, and is not to be construed as limiting the invention to the embodiments shown. It is appreciated that various modifications may occur to those skilled in the art that, while not specifically shown herein, are nevertheless within the true spirit and scope of the invention.
As will be appreciated by one skilled in the art, aspects of the present invention may be embodied as a system, method or computer program product. Accordingly, aspects of the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects of the present invention may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon.
Any combination of one or more computer readable medium(s) may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical data storage device, a magnetic data storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device.
A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof. A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device.
Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing.
Computer program code for carrying out operations for aspects of the present invention may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).
Aspects of the present invention are described below with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks.
The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
Reference is now made to
Computer 102 also preferably includes an interceptor 112 that is configured to intercept requests made by executed software application 122 to retrieve data from placeholder files 110′, preferably where interceptor 112 prevents the operating system of computer 102 from processing the request, such as by withholding the request from the operating system. Interceptor 112 then forwards the request to manager 100. When manager 100 receives a request for data from interceptor 112, manager 100 determines whether the requested data are present within placeholder files 110′. If the requested data are present within placeholder files 110′, manager 100 allows executed software application 122 to retrieve the requested data from placeholder files 110′, preferably by allowing the operating system of computer 102 to process the request, such as by forwarding the request to the operating system or instructing interceptor 112 to forward the request to the operating system. If the requested data are not present within placeholder files 110′, manager 100 retrieves the requested data from their location(s) within data files 110, and places the retrieved data into their corresponding location(s) within placeholder files 110′. Manager 100 then allows executed software application 122 to retrieve the requested data from placeholder files 110′, such as is described above. Manager 100 may also retrieve other data from data files 110 in advance of requests by executed software application 122 to retrieve such data, as is described hereinbelow in greater detail.
Reference is now made to
Reference is now made to
If the requested data are referred to in a predefined block that includes one or more references to data that are associated with the software application (step 208), and if the block has no predefined rules associated with it (step 210), then the data referred to in the block are preferably retrieved in accordance with a default retrieval priority where they are not present at the first location (step 212), such as by retrieving the data from the remote server. The retrieved data are then stored in predefined locations within corresponding files stored at the first location (step 214). If the block has one or more predefined rules associated with it, then the rules are evaluated and followed where applicable (step 216), such as where the rules indicate that data referred to in the block, and/or in one or more other blocks, are to be retrieved, and at what retrieval priority. A description of examples of such rules and their application now follows.
Where the data referred to in a block are to be retrieved as described hereinabove, the block may be logically placed in a priority queue together with an indicator of a retrieval priority, such as an integer between 1 and 9, where 1 indicates the highest level of retrieval priority. Data referred to in higher priority blocks in the priority queue are preferably retrieved before data referred to in lower priority blocks unless otherwise indicated by a rule. Data referred to in multiple blocks with equal priority are preferably retrieved in a round-robin fashion. Rules associated with a block may affect the priority queue as follows:
Other types of rules associated with a block may include rules that:
Reference is now made to
As shown in
Reference is now made to
The system of
Reference is now made to
Reference is now made to
Thus, in the method of
Reference is now made to
Processing preferably continues for the second element at step 604 of
Reference is now made to
Upon applying the method of
Reference is now made to
As another example, the method described in
Reference is now made to
Thus the method of
Reference is now made to
Reference is now made to
Reference is now made to
Reference is now made to
During traversal, each data element is prioritized based on one more factors. For example, the data elements can be prioritized based, at least in part, on their retrieval priority, which may be set by the developer or may be determined based on a default retrieval priority, as discussed herein. The data elements can also be prioritized based, at least in part, on one or more rules which may be associated with each data element or data block, as discussed above. The data elements can also be prioritized based, at least in part, on the size of each data element. For example, data elements that have larger sizes may be prioritized higher or lower than data elements having smaller sizes. In another example, data elements having larger sizes are distributed in priority, which may reduce any latency the user may experience due to download/retrieval times. The data elements can also be prioritized based, at least in part, on one or more tags associated with each data element or data block. The tags can group the data elements based on a common tag. Each group of data elements can be prioritized, for example, based on the user's interaction with the computer software application. For example, the computer software application can determine based on the user's interaction history that the user may need certain types of data for the computer software application. The grouping can also be prioritized based on the user's interaction with a game—e.g., level 2 is downloaded before level 3, etc.
In step 1120, the order of the data retrieval is determined. The order of the data retrieval can be based on or more of the priority or grouping factors discussed above. For example the order of the data retrieval can be based, at least in part, on the retrieval priority, the size of each data element, and/or a tag or common tag. Some or all of these factors can be stored in the log and associated with each data element. The order of the data retrieval can be determined during the execution of the computer software application or at a time other than during the execution of the computer software application (e.g., prior to or after the execution of the computer software application).
In step 1130, data responsive to any of the requests for data, made by the computer software application, is retrieved from the server (or other data storage location). Some or all of the data requested are identified in the log as the data elements, which were prioritized as discussed above in steps 1110 and 1120. The retrieval can be performed in accordance with a data retrieval plan associated with the data requested by the computer software application. For example, the data retrieval plan can indicate that certain data elements are needed immediately by the computer software application (e.g., the user moved into a room in a game that needs certain data to render the room) while other data elements (e.g., data associated with surrounding rooms, or with the next level of the game) can be retrieved later. The data retrieval plan can also determine when it is appropriate to retrieve data elements that have a common tag associated therewith (e.g., to load the next level of a game, etc.). The data retrieval plan can also retrieve data based on the user's actions and/or based on anticipated user actions (e.g., based on the user's interaction history with the computer software application). The data retrieval in step 1130 can occur during the execution of the computer software application or at a time other than during the execution of the computer software application (e.g., prior to or after the execution of the computer software application).
In some embodiments, the retrieval priority of a data element can be modified. For example, a developer may adjust the priority of a data element. In another example, the priority of a data element can be modified by the server, for example after a tag is associated with the data element and/or after the server determines the size of other data elements that will be retrieved concurrently. For example, if the relative size of the data element is large compared to the other data elements that will be retrieved concurrently, the server can increase or decrease the retrieval priority, as discussed above.
In some embodiments, the data retrieved corresponds to one or more of the supplemental data files (e.g., data files 110) used by the core files for the computer software application. The supplemental data files can include features, functionality, media resources (e.g., an audio file and/or a video file), and/or other data that are used by the computer software application. The computer software application may need the supplemental data files in response to a user's interaction with the predefined portion (i.e., the core files 108) of the computer software application, or in response to a user's interaction with the computer software application after one or more of the supplemental data files have been retrieved (e.g. retrieving data files for level 3 of a game in response to the user completing level 2). The supplemental data files can also include supplemental functionality that the user may purchase or request. In some embodiments, the predefined portion (i.e., the core files 108) of the computer software application is configured to operate in or achieve a first state and the predefined portion, together with one or more data files, is configured to operate in or achieve a second state. The first state can correspond to the initial installation of the computer software application on the client computer. The second state can correspond to the initial installation of the computer software application with additional data or functionality provided by the supplemental data files. Thus, the computer software application can be modularly created with core files and supplemental data files.
Reference is now made to
In step 1220, the client device executes at least one of the core files to cause the execution of the computer software application. For example, the core files can include an executable file (e.g., a file with an “.exe” or other suffix) that causes at least the predefined portion of the computer software application to execute. In some embodiments, the predefined portion of the computer software application executes and runs with the appearance, to the user, that the entire computer software application, including the supplemental data files, have already been downloaded.
In step 1230, a request for a first set of the supplemental data files is generated during the execution of at least the computer software application (e.g., the predefined portion of the computer software application). As discussed above, the supplemental data files can provide features, functionality, media resources (e.g., an audio file and/or a video file), and/or other data that are used by the computer software application. Thus, the first set of supplemental data files can provide one or more features, functions, media resources, and/or other data for the computer software application. The first set of supplemental data files can be requested and retrieved in response to a user's interaction with the computer software application, as described above.
In step 1240, the client device determines whether the first set of supplemental data files, requested in step 1230, are stored locally. If they are stored locally, in step 1250 client device (e.g., the computer software application and/or client device operating system) retrieves the files from local memory for use by the computer software application. If they are not stored locally, in step 1260 the client device retrieves the first set of supplemental data files from a network-accessible data store device, such as a server, in network communication with the client device. The data retrieval in steps 1250 and/or 1260 can occur during execution of the computer software application or at a time other than during execution of the computer software application (e.g., after the cores files are downloaded and installed but before the computer software application is executed on the client device).
In some embodiments, the client device determines whether placeholder files (e.g., placeholder files 110′, discussed above) for the first set of supplemental data file are stored locally on the client device. The existence of placeholder files indicates that the first set of supplemental data files are not stored locally on the client device. The placeholder files can include metadata that indicate the size, file type, or other information of the corresponding first set of supplemental data files. In some embodiments, the first set of supplemental data files are retrieved according to the retrieval priority associated with the first set of supplemental data files and/or the retrieval priority associated with each file in the first set of supplemental data files. The retrieval priority can be determined based on the metadata in the placeholder files, the retrieval priority in a log (e.g., as described in
Additional requests for supplemental data and/or supplemental data files can be generated, for example during execution of the computer software application. For example, the additional requests may result from the user's interaction with a game (e.g., advancing to the next level), the user's requests for additional functionality, and/or they may be automatically generated (e.g., as background tasks after the initial core files are downloaded and/or in response to a user's interaction with the computer software application). For each request for supplemental data and/or supplemental data files, the flow chart 1200 repeats through steps 1230 and 1240 and, depending on whether the supplemental data file is stored locally, step 1250 or 1260.
Reference is now made to
In step 1320, the client device creates at least a first and/or other placeholder file(s), that corresponds to the at least the first and/or other supplemental data file(s), in its local storage in place of the first and/or other supplemental data file. In other embodiments, the network-accessible storage device includes both supplemental files and placeholder files, in which case the placeholder file(s) is/are retrieved by the client device in step 1310.
In step 1330, the client device installs the core files and first and/or other placeholder file(s) locally, for example in a local memory device in the client device or in communication with the client device. In step 1340, the client device receives a request from the computer software application for first data from the first and/or other data file(s). The request can correspond to or can be in response to a user's request for additional functionality for the computer software application or a user's interaction with the computer software application, for example while playing a game.
In step 1350, the client device determines whether the first and/or other data file(s), requested in step 1340, is/are stored locally. In some embodiments, the client device determines that a data file(s) is/are not stored locally by determining that a placeholder file(s) is stored locally in place of the requested data file(s). The existence of the placeholder file(s) can indicate, to the client device, that the requested file(s) is/are not stored locally. In some embodiments, the placeholder file(s) includes metadata that indicates that the requested file(s) is/are not stored locally. In addition or in the alternative, the metadata can indicate one or more properties of the requested data file(s), such as its/their size, file type, tags associated with the data file(s), etc.
If any of the data files are stored locally, in step 1360 the client device (e.g., the client device operation system and/or the computer software application) retrieves them from local storage (e.g., from a local memory device in the client device or from a local memory device in communication with the client device), for use by the computer software application. If any of the data files are not stored locally, in step 1370 the client device retrieves them from the network-accessible data storage device or server. In some embodiments, the data file(s) can be retrieved according to a retrieval priority and/or a data retrieval plan associated with the data or data elements associated with the data file(s), or associated with the data file(s) itself/themselves. The retrieval priority and/or data retrieval plan can be stored in a log of data files or data elements to be requested by the client device, as discussed above. The data retrieval in steps 1360 and/or 1370 can occur during execution of the computer software application or at a time other than during execution of the computer software application (e.g., after the cores files are downloaded and installed but before the computer software application is executed on the client device).
Additional requests for supplemental data and/or supplemental data files can be received, for example during execution of the computer software application. For example, the additional requests may result from the user's interaction with a game (e.g., advancing to the next level), from the user's requests for additional functionality, or from automatic generation (e.g., automatically generated as background tasks after the initial core files are downloaded and/or in response to a user's interaction with the computer software application). For each request for supplemental data and/or supplemental data files, the flow chart 1300 repeats through steps 1340 and 1350 and, depending on whether the supplemental data file is stored locally, step 1360 or 1370.
Reference is now made to
Process 1401 includes a dataset writer 1404 configured to write the first dataset 1406 to one or more data storage devices 1408, such as where the various portions of first dataset 1406 are downloaded via a computer network and then written to corresponding data storage locations 1410 on data storage devices 1408. Process 1401 can also be for installing, compiling, or storing portions of first dataset 1406 on data storage locations 1410 on data storage devices 1408, as discussed above.
First dataset 1406 can be, for example, a collection of the files, such as core files and data files, that make up a computer software application, such as a game, a software tool (e.g., a word processing program, etc.), or other application. The core files can include at least one executable file that launches the computer software application, as discussed above. Preferably, all of the data storage locations 1410 that are required to accommodate the writing of first dataset 1406 to data storage devices 1408 are reserved in advance by dataset writer 1404 once the storage requirements of first dataset 1406, such as its file names and sizes, become known to dataset writer 1404, such that even before dataset writer 1404 downloads a given portion of first dataset 1406 the portion is already associated with a particular data storage location 1410 to which the portion is to be written. In other embodiments, the dataset writer 1404 reserves the data storage locations 1410 as the files are retrieved or created.
To reserve the data storage locations 1410, dataset writer 1404 communicates with memory location manager 1412. Memory location manager 1412 receives requests to write data from dataset writer 1404 and determines the memory storage locations 1410 that dataset writer 1404 can use to write data portions for the first dataset 1406. To determine which memory storage locations 1410 are available for dataset writer 1404, memory location manager 1412 checks a list 1418 that identifies the unprotected data portions and/or the corresponding unprotected data storage locations 1410 in which the unprotected data portions reside. These unprotected data portions and their corresponding unprotected data storage locations 1410 are available to dataset writer 1404 to write data portions for the first dataset 1406. To reserve certain data storage locations 1410 for the first process 1401, the memory location manager 1412 removes them (and their corresponding resident data portions) from the list 1418 of unprotected data storage locations, such that they become protected data storage locations and protected data portions. Similarly, to reserve certain data portions stored in corresponding data storage locations 1410, memory location manager 1412 can remove those data portions from the list 1418, in addition to the data storage locations that store the reserved data portions, such that the reserved data portions and corresponding memory locations become protected data portions and protected data storage locations, respectively. After the data storage locations and/or data potions are removed from the list 1418, they will not be available to a second process 1402 that is writing a second dataset 1426 to the data storage device(s) 1408. Thus, any data storage location and/or data portion not in the list 1418 of unprotected data portions and/or unprotected data storage locations is not available for a process to write data to unless it has already been assigned to the process by its memory location manager.
Dataset writer 1404 is preferably configured to check list 1418, via memory location manager 1412, before writing each portion of first dataset 1406 to a data storage location 1410 to see whether or not the data storage location and/or the resident data portion stored in the data storage location is included in list 1418. If the data storage location or the resident data portion is included in list 1418, then dataset writer 1404 writes the portion of first dataset 1406 to the data storage location. If the data storage location or the resident data portion is not included in list 1418, then dataset writer 1404 does not write the portion of first dataset 106 to the data storage location.
In some embodiments, data storage locations and/or data portions assigned to the first process 1401 are removed from the list 1418 until the entire first dataset 1406 has been written to data storage device(s) 1408, in which case they are reserved and unavailable to second process 1402. In other embodiments, individual or groups of data storage location(s) are removed the list 1418, for example while a portion of first dataset 1406 is written to a group of data storage locations. In addition or in the alternative, individual or groups of data portions are removed the list 1418, for example while a portion of first dataset 1406 is written to a group of data storage locations. After dataset writer 1404 writes that portion of first dataset 1406, the group of data storage locations and/or data portions are added back to list 1418 so that they can be accessed and used by second process 1402. As a result, dataset writer 1414 in second process 1402 can write to certain data locations that include data portions of first dataset 1406 before the first process 1401 has completed writing all portions of first dataset 1406 or after the first process 1401 has completed writing all portions of first dataset 1406.
The second data 1426 written by dataset writer 1414 in the second process 1402 can include revised or replacement data (e.g., a patch) for a portion of first dataset 1406. For example, a developer may deploy second data 1426 as a patch for a computer software application. If this occurs when the user is downloading the base files to his computer (e.g., first process 1401), the computer may initiate a new process (e.g., second process 1402) to download and install the patch (e.g., second data 1426) before the base files are fully downloaded (e.g., before the first process 1401 has completed writing all portions of first dataset 1406) or after the base files are fully downloaded (e.g., after the first process 1401 has completed writing all portions of first dataset 1406). The developer can also deploy second data 1426 as a patch when the server is compiling the computer software application on data storage device(s) 1408 for download. Thus, in some embodiments, the compiling can correspond to the first process 1401 and the patching can correspond to the second process 1402.
In some embodiments, a data storage location and/or its resident data portion can be protected if one of the processes (e.g., first process 1401) is currently writing data (e.g., a portion of first dataset 1406) to that data storage location. In some embodiments, a data storage location and/or its resident data portion can be protected when the data stored in that data storage location is needed, now or in the future, by the computer software application. For example, the data storage location and/or its resident data portion can be protected when the resident data portion is needed by a computer software application to achieve a future state, such for a subsequent level of a video game. In some embodiments, the data or data portion(s) can include a tag or label that indicates the state(s) (e.g., level(s)) in which the data or data portion(s) is/are used in the computer software application (e.g., a game). For example, the data or data portion(s) can be tagged with levels 1 and 2 of a game, in which case the data or data portion(s) (and corresponding data storage locations) for those levels is/are protected until the user completes both level 1 and level 2. After the user completes level 2, that data or data portion(s) (and corresponding data storage locations) becomes unprotected, at which time they can be deleted or overwritten to save memory space. Thus, the tag/label can indicate that the data or data portion(s) is/are common to multiple levels of the game (or other aspects of the computer software application). In some embodiments, the data portions or elements in the second dataset 1426 can include a special flag or label to indicate that they are a patch or replacement data. The special flag/label can indicate to the second process 1402 (e.g., to memory location manager 1422) that the corresponding portions of the first dataset 1406 and their corresponding data storage locations are to be replaced even though the computer software application still needs access to them (e.g., the user has not completed level 2) and the corresponding data storage locations are protected data storage locations that are included in list 1518.
Any of the elements shown in
Reference is now made to
In step 1620, a list of unprotected data portions and/or unprotected data storage locations is maintained by the computer system. The list of unprotected data portions and/or unprotected data storage locations includes one or more data portions and/or data storage locations that may be the subject of a write request (e.g., by the first computer-implemented process and/or by a second computer-implemented process). In step 1630, the computer system identifies a request made by the first or second computer-implemented process to write a second dataset (e.g., a patch), such as a new dataset, to one of the data storage locations and/or data portions to which the first computer-implemented process has written some or all of the portions of the first dataset. The second dataset can correspond to an update for a portion of the computer software application, such as an update to first and/or second supplemental data (e.g., as provided in first and/or second supplemental data files) for the computer software application.
In step 1640, the first or second computer-implemented process checks (e.g., using a memory location manager) the list of unprotected data portions and/or unprotected data storage locations before writing any of the portions of the second dataset to a selected data storage location to determine whether or not the selected data storage location and/or the resident data portion stored in the selected data storage location is included in the list of unprotected data portions and/or unprotected data storage locations. If the selected data storage location and/or the resident data portion is included in the list, then the selected data storage location and/or the resident data portion is available for writing by the first or second computer-implemented process.
In step 1650, the selected data storage location is written to, by the first or second process, only if the selected data storage location and/or the resident data portion is included in the list of unprotected data portions and/or unprotected data storage locations. By checking that the selected data storage location and/or the resident data portion is/are included in the list unprotected data portions and/or unprotected data storage locations, the method ensures that second dataset is not written to a protected data storage location and/or written over a protected data portion. In some embodiments, the second dataset includes a special flag or label that allows at least a portion of the second dataset to replace at least a portion of the first dataset even though a portion of the first dataset is stored in protected data storage locations and/or the portion of the first dataset is protected, for example as discussed above.
In some embodiments, the data portions stored in the unprotected data storage locations can be deleted, for example to save memory space and/or to make room for new data. For example, data or data portions for a first level of a video game can be deleted after the user passes the first level. Data or data portions for a second level of the video game can then replace or overwrite the data for the first level of the video game. In some embodiments, the data or data portions can include one or more tags that indicate where/how (e.g., in which states) the data is used in the computer software application, such as which level(s) or room(s) the data is used. When the level(s) or room(s) are no longer needed (e.g., after the user passes level 2 of a game), the data or data portions for the level(s) or room(s) can be deleted or overwritten and their corresponding data storage locations can be released by adding them to the list of unprotected data portions and/or unprotected data storage locations.
In some embodiments, the data or data portions stored in the unprotected data storage locations can be deleted when it/they is not referenced or accessed by a computer software application. For example, the computer software application may not reference or access certain data or data portions for level 1 after the user completes that level. In some embodiments, the data or data portions stored in the unprotected data storage locations can be deleted when an available storage volume of the data storage device falls below a predetermined minimum available storage volume. In some embodiments, the data or data portions stored in the unprotected data storage locations can be deleted when a total volume of data stored on the data storage device by the first computer-implemented process exceeds a predetermined maximum storage volume allocated to the first computer-implemented process. In some embodiments, a preservation or deletion priority is associated with each data element, data group, and/or data portion. The preservation priority can indicate the priority for preserving each data element/group/portion in unprotected data storage locations when the system deletes data. The deletion priority can indicate the priority for deleting each data element/group/portion in unprotected data storage locations when the system deletes data. The preservation and/or deletion priority can also be used to determine the order of deletion of each data element/group/portion from the unprotected data storage locations.
Reference is now made to
In step 1720, a list of protected data portions and/or protected data storage locations is maintained by the computer system. The list of protected data portions and/or protected data storage locations includes one or more data portions and/or data storage locations that may be the subject of a write request (e.g., by the first computer-implemented process and/or by a second computer-implemented process). The protected data storage locations can include data storage locations that are currently undergoing a write by the first or the second process. The protected data storage locations can also include data storage locations that have common data (e.g., as indicated by a common flag) and thus need to be retained until the common data is no longer needed (e.g., after the user completes levels 1 and 2 and the common data is for levels 1 and 2). The protected data portions can include the data portions that are currently being written by the first or the second process and/or the data portions include common data, as discussed above.
In step 1730, the computer system identifies a request made by the first or second computer-implemented process to write a second dataset (e.g., a patch), such as a new dataset, to one of the data storage locations and/or data portions to which the first computer-implemented process has written some or all of the portions of the first dataset. The second dataset can correspond to an update for a portion of the computer software application, such as an update to first and/or second supplemental data (e.g., as provided in first and/or second supplemental data files) for the computer software application.
In step 1740, the first or second computer-implemented process checks (e.g., using a memory location manager) the list of protected data portions and/or protected data storage locations before writing any of the portions of the second dataset to a selected data storage location to determine whether or not the selected data storage location and/or the resident data portion stored in the selected data storage location is included in the list of protected data portions and/or protected data storage locations. In step 1750, the selected data storage location is written to, by the first or second process, only if the selected data storage location and/or the resident data portion stored in the selected data storage location is not included in the list of protected data portions and/or protected data storage locations. By checking that the selected data storage location and/or the resident data portion is included in the list of protected data portions and/or protected data storage locations, the method ensures that second dataset is not written to a protected data storage location and/or written over a protected data portion. In some embodiments, the second dataset includes a special flag or label that allows at least a portion of the second dataset to replace at least a portion of the first dataset even though a portion of the first dataset is stored in protected data storage locations and/or the portion of the first dataset is protected, for example as discussed above.
In some embodiments, the data portions stored in the unprotected data storage locations (i.e., not stored in protected data storage locations) can be deleted, for example to save memory space and/or to make room for new data. For example, data or data portions for a first level of a video game can be deleted after the user passes the first level. Data or data portions for a second level of the video game can then replace or overwrite the data for the first level of the video game. In some embodiments, the data or data portions can include one or more tags that indicate where/how (e.g., in which states) the data is used in the computer software application, such as which level(s) or room(s) the data is used. When the level(s) or room(s) are no longer needed (e.g., after the user passes level 2 of a game), the data or data portions for the level(s) or room(s) can be deleted or overwritten and their corresponding data storage locations can be released by removing them from the list of protected data portions and/or protected data storage locations.
In some embodiments, the data or data portions that are not stored in the protected data storage locations can be deleted when they are not referenced or accessed by the computer software application. For example, the computer software application may not reference or access certain data or data portions for level 1 after the user completes that level. In some embodiments, the data or data portions that are not stored in the protected data storage locations can be deleted when an available storage volume of the data storage device falls below a predetermined minimum available storage volume. In some embodiments, the data or data portions that are not stored in the protected data storage locations can be deleted when a total volume of data stored on the data storage device by the first computer-implemented process exceeds a predetermined maximum storage volume allocated to the first computer-implemented process. In some embodiments, a preservation or deletion priority is associated with each data element, or data group, and/or data portion. The preservation priority can indicate the priority for preserving each data element/group/portion in unprotected data storage locations when the system deletes data. The deletion priority can indicate the priority for deleting each data element/group/portion in unprotected data storage locations when the system deletes data. The preservation and/or deletion priority can also be used to determine the order of deletion of each data element/group/portion from the unprotected data storage locations.
The flowchart and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions. It is noted that one or more blocks from a first flowchart can be combined with one or more blocks from a second flowchart, and that the flowcharts are solely provided to illustrate exemplary embodiments.
It will be appreciated that any of the elements described hereinabove may be implemented as a computer program product embodied in a computer-readable medium, such as in the form of computer program instructions stored on magnetic or optical storage media or embedded within computer hardware, and may be executed by or otherwise accessible to a computer (not shown).
While the methods and apparatus herein may or may not have been described with reference to specific computer hardware or software, it is appreciated that the methods and apparatus described herein may be readily implemented in computer hardware or software using conventional techniques.
While the invention has been described with reference to one or more specific embodiments, the description is intended to be illustrative of the invention as a whole and is not to be construed as limiting the invention to the embodiments shown. It is appreciated that various modifications may occur to those skilled in the art that, while not specifically shown herein, are nevertheless within the true spirit and scope of the invention.
This application is a continuation-in-part of U.S. patent application Ser. No. 15/420,729, filed on Jan. 31, 2017, which is a continuation of U.S. patent application Ser. No. 14/859,408, filed on Sep. 21, 2015, which is a continuation of U.S. patent application Ser. No. 14/296,642, filed on Jun. 5, 2014, which is a continuation of U.S. patent application Ser. No. 13/412,765, filed on Mar. 6, 2012, which claims priority to U.S. Provisional Patent Application No. 61/449,675, filed on Mar. 6, 2011, which are incorporated herein by reference in their entirety.
Number | Date | Country | |
---|---|---|---|
61449675 | Mar 2011 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 14859408 | Sep 2015 | US |
Child | 15420729 | US | |
Parent | 14296642 | Jun 2014 | US |
Child | 14859408 | US | |
Parent | 13412765 | Mar 2012 | US |
Child | 14296642 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 15420729 | Jan 2017 | US |
Child | 15435731 | US |