US9513961B1 - Monitoring application loading - Google Patents

Monitoring application loading Download PDF

Info

Publication number
US9513961B1
US9513961B1 US14/243,030 US201414243030A US9513961B1 US 9513961 B1 US9513961 B1 US 9513961B1 US 201414243030 A US201414243030 A US 201414243030A US 9513961 B1 US9513961 B1 US 9513961B1
Authority
US
United States
Prior art keywords
native application
threads
idle
application instance
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active, expires
Application number
US14/243,030
Inventor
Erik Hendriks
Mario Guajardo-Cespedes
Thomas William Knych
Chen Wang
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Priority to US14/243,030 priority Critical patent/US9513961B1/en
Assigned to GOOGLE INC. reassignment GOOGLE INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: GUAJARDO-CESPEDES, MARIO, HENDRIKS, ERIK, KNYCH, THOMAS WILLIAM, WANG, CHEN
Application granted granted Critical
Publication of US9513961B1 publication Critical patent/US9513961B1/en
Assigned to GOOGLE LLC reassignment GOOGLE LLC CHANGE OF NAME (SEE DOCUMENT FOR DETAILS). Assignors: GOOGLE INC.
Active legal-status Critical Current
Adjusted expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3055Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
    • G06F9/4443
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Definitions

  • the Internet provides access to a wide variety of information.
  • digital image files, video and/or audio files, as well as web page resources for particular subjects or particular news articles are accessible over the Internet.
  • web page resources many of these resources are designed to facilitate the performing of particular functions, such as banking, booking hotel reservations, shopping, etc., or to provide structured information, such as on-line encyclopedias, movie databases, etc.
  • native applications that facilitate the performance of the same functions facilitated by the use of web page resources are now being provided in large numbers. Additionally, native applications that do not have websites with synchronous content, such as games, are also very popular on tablet computers and smart phones. Accordingly, search systems now also facilitate searching of these native applications.
  • a deep link is an instruction specifying a particular environment instance of a native application and configured to cause the native application to instantiate the environment instance of the specified native application when selected at a user device.
  • the native application generates the environment instance for display within the native application on a user device.
  • the search system may crawl and index the content provided in the environmental instance.
  • the native application should be fully instantiated before the crawling and indexing operation beings, otherwise some information may not be indexed.
  • This specification describes technologies relating to monitoring application loading to determine when an application is sufficiently instantiated to be subject to a crawling operation.
  • one innovative aspect of the subject matter described in this specification can be embodied in methods that include the actions of instantiating an instance of a native application that generates environment instances for display on a user device within the native application instance; monitoring requests for content sent from the native application instance to serving entities that are external to the native application instance; determining whether each monitored request has been fulfilled; in response to determining that each monitored request has been fulfilled: determining whether each thread in a set of threads of the native application instance is idle, generating a load signal in response to determining each thread in the set of thread of the native application instance is idle, the load signal indicating the native application instance is sufficiently instantiated to be subject to a crawling operation.
  • Other embodiments of this aspect include corresponding systems, apparatus, and computer programs, configured to perform the actions of the methods, encoded on computer storage devices.
  • FIG. 1 is a block diagram of an example environment in which native applications are indexed in response to determining the native applications are sufficiently instantiated.
  • FIG. 2 is a flow diagram of an example process for determining whether an application is sufficiently instantiated.
  • FIG. 3 is a flow diagram of an example process for determining whether a request has been fulfilled.
  • FIG. 4 is a flow diagram of an example process for monitoring inter-process communication (IPC) calls for threads.
  • IPC inter-process communication
  • FIG. 5 is a flow diagram of an example process for monitoring user interface (UI) worker threads.
  • UI user interface
  • a system receives a set of deep links for a native application and, for each deep link, instantiates the native application in preparation for crawling and indexing content provided by the native application in response to the deep link.
  • a native application generates environment instances for display on a user device within an environment of the native application, and operates independent of a browser application on the user device.
  • a native application is an application specifically designed to run on a particular user device operating system and machine firmware. Native applications thus differ from browser-based applications and browser-rendered resources. The latter require all, or at least some, elements or instructions downloaded from a web server each time they are instantiated or rendered.
  • browser-based applications and browser-rendered resources can be processed by all web-capable mobile devices within the browser and thus are not operating system specific.
  • a deep link is an instruction specifying a particular environment instance of a native application and configured to cause the native application to instantiate the environment instance of the specified native application when selected at a user device.
  • the native application generates the environment instance for display within the native application on a user device.
  • a deep link may specify a selection menu for a game environment; or content from a website, such as a news site, forum, and the like; or a particular recipe for a cooking application; and the like.
  • the system To properly crawl and index native application content, the system must determine when the native application is sufficiently instantiated, e.g., finished loading and displaying the content that should be crawled for the deep link. Applications, however, may go through many states: fetching some content, processing the content, showing intermediate results before displaying final results, etc.
  • a system monitors requests sent by the native application in response to instantiation, and determines when the requests have been fulfilled. When the requests have been fulfilled, the system determines if a set of threads for the native application are idle. The set of threads being idle after the requests are fulfilled is interpreted as a signal that the native application is sufficiently instantiated for a crawling and indexing operation. In response, the system generates a load signal, which causes a search system to crawl the content output by the native application and index the content.
  • FIG. 1 is a block diagram of an example environment 100 in which native applications are indexed in response to determining the native applications are sufficiently instantiated.
  • a computer network 102 such as the Internet, connects resource publisher web sites 104 , application publishers 106 , user devices 108 and a search system 110 .
  • a resource publisher website 104 includes one or more web resources 105 associated with a domain and hosted by one or more servers in one or more locations.
  • a resource publisher website is a collection of web pages formatted in hypertext markup language (HTML) that can contain text, images, multimedia content, and programming elements.
  • HTML hypertext markup language
  • Each website 104 is maintained by a content publisher, which is an entity that controls, manages and/or owns the website 104 .
  • a web page resource is any data that can be provided by a publisher website 104 over the network 102 and that has a resource address, e.g., a uniform resource locator (URL).
  • Web resources may be HTML pages, images files, video files, audio files, and feed sources, to name just a few.
  • the resources may include embedded information, e.g., meta information and hyperlinks, and/or embedded instructions, e.g., client-side scripts.
  • An application publisher website 106 may also include one or more web resources 105 , and also provides native applications 107 .
  • a native application 107 is an application specifically designed to run on a particular user device operating system and machine firmware.
  • an “environment instance” is a display environment within a native application and in which is displayed content, such as text, images, and the like.
  • An environment instance is specific to the particular native application, and the native application is specific to the particular operating system of the user device 108 .
  • An environment instance differs from a rendered web resource in that the environment instance is generated within and specific to the native application, while a web resource may be rendered in any browser for which the web page resource is compatible, and is independent of the operating system of the user device.
  • a user device 108 is an electronic device that is under the control of a user.
  • a user device 108 is typically capable of requesting and receiving web page resources 104 and native applications 107 over the network 102 .
  • Example user devices 108 include personal computers, mobile communication devices, and tablet computers.
  • the search system 110 accesses a web index 112 and an application index 114 .
  • the web index 112 is an index of web resources 105 that has, for example, been built from crawling the publisher web sites 104 .
  • the application index 114 is an index of environment instances for native applications 107 , and is constructed using an indexer 114 that receives data crawled from an application instance 122 of a native application. Although shown as separate indexes, the web index 112 and the application index 114 can be combined in a single index.
  • the user devices 108 submit search queries to the search system 110 .
  • the search system 110 accesses the web index 112 and the application index 114 to identify resources and applications, respectively, that are relevant to the query.
  • the search system 110 may, for example, identify the resources and applications in the form of web resource search results and native application search results, respectively. Once generated, the search results are provided to the user device 108 from which the query was received.
  • a web resource search result is data generated by the search system 110 that identifies a web resource and provides information that satisfies a particular search query.
  • a web resource search result for a resource can include a web page title, a snippet of text extracted from the resource, and a resource locator for the resource, e.g., the URL of a web page.
  • a native application search result specifies a native application and is generated in response to a search of the application index 114 of environment instances.
  • a native application search results includes a “deep link” specifying a particular environment instance of the native application and which is configured to cause the native application to instantiate the specified environmental instance. For example, selection of a native application search result may cause the native application to launch (if installed on the user device 108 ) and generate an environment instance referenced in the application search result in the form of a screen shot.
  • publishers 106 that provide native applications 107 also provide deep links to the search system 110 .
  • third parties may also provide deep links for native applications.
  • the search system 110 can discover deep links from other multiple sources, such as app maps, web page annotations, etc., and thus the set of deep links may be constantly changing.
  • an application publisher may provide a list of deep links 109 in the form of uniform resource identifiers (URIs) (or other instruction types that are specific to the native application published by the publisher).
  • URIs uniform resource identifiers
  • the search system 110 uses an operating system emulator 120 that emulates an operating system on which native applications 107 are executed.
  • the operating system emulator 120 instantiates an instance 122 of a native application for each deep link 108 .
  • a load detector 130 receives data from a request monitor 124 and a thread monitor 126 , and, using the received data, determines if the native application instance 122 is sufficiently instantiated for a crawling and indexing operation.
  • the load detector 130 determines the native application instance 122 is sufficiently instantiated for the crawling and indexing operation, the load detector 130 generates a load signal.
  • a data extractor 128 receives the load signal, and in response crawls the content of the native application instance 122 .
  • the crawled content is provided to the indexer 140 , which then indexes the content of the native application in the application index 114 .
  • emulator 120 While the examples below are described in the context of an emulator 120 , other devices and environments can be used for monitoring the status of an application. For example, a virtual machine or even an instrumented mobile device can be used.
  • FIG. 2 is a flow diagram of an example process 200 for determining whether an application is loaded.
  • the process 200 can be implemented in a data processing apparatus, such as one or more computers in data communication.
  • the process 200 instantiates an instance of a native application ( 202 ).
  • the OS emulator 120 selects a deep link 108 to instantiate a native application.
  • the OS emulator 120 is configured to instrument the instance 122 of the native application so that the request monitor 124 and thread monitor 126 can monitor the status of requests and threads.
  • the thread monitor 126 may be a process that is loaded in the same application process space, such as by loading a shared library with the application instance 122 , and is thus able to monitor thread status of the application instance 122 .
  • the request monitor 124 can be loaded in a similar manner, or can be loaded entirely separate from the application instance 122 .
  • the process 200 monitors requests for content sent from the native application instance to serving entities that are external to the native application instance ( 202 ).
  • the request monitor 124 may be configured to act as a proxy that intercepts requests, logs the requests, and then sends the requests to the external services. The time the request was sent is monitored by the request monitor 124 and the content received in response to the request is also monitored. When content is received in response to a request, the request monitor 124 provides the content to the application instance 122 .
  • the process 200 determines whether each monitored request is fulfilled ( 206 ). For each request, the request monitor 124 determines, for example, whether content has been received for the request. If content has been received for a request, the request monitor 124 may determine whether the content is responsive to the request. Additionally, the request monitor 124 may also determine if a request has timed out, e.g., a response has not been received within a predefined timeout period. FIG. 3 below describes in more detail an example process 300 of determining whether a request is fulfilled.
  • each monitored request is not fulfilled, e.g., if at least one monitored request is not fulfilled, then the process returns to stage 204 . However, if the process 200 determines each monitored request is fulfilled, then the process 200 waits for a timer period ( 208 ). This step is optional, as indicated by phantom process block. The timer period is selected to provide enough time for the application instance to process the content received from the requests.
  • the process 200 then checks the status of threads in a set of threads ( 210 ).
  • the thread status for the set may include, for example, processor utilization for the thread, whether the thread has any unfilled IPC calls, and whether a message queue for the threads is empty.
  • the status of other features can also be considered. Examples of thread status checks are described with reference to FIGS. 4 and 5 below.
  • the process 200 determines, based on the status of the threads, whether each thread is idle ( 212 ). For example, if each thread has very low processor utilization, has no associated IPC call that is unfulfilled, and a message queue for the threads is empty, then the process 200 may determine that each thread is idle. All of these features, however, need not be checked to make the determination; for example, the determination can be made solely on the processing utilization of each thread.
  • each thread is not idle, e.g., at least one thread is not idle, then the process returns to stage 210 . Otherwise, if the process 200 determines each thread is idle, then the process 200 generates the load signal ( 214 ). The load signal is then provided to the data extractor 128 , which then beings the crawling process to collect data for indexing by the indexer 140 .
  • FIG. 3 is a flow diagram of an example process 300 for determining whether a request has been fulfilled. The process 300 is done for each monitored request.
  • the process 300 monitors a request ( 302 ). For example, as described above, the request monitor 124 monitors for content to be returned for the request.
  • the process 300 determines content is returned for the request ( 304 ). If content is returned for the request, then the process may determine that the request is fulfilled ( 306 ), depending on the content returned. For example, in some implementations, a request is deemed fulfilled only if the content received is responsive to the request, and does not indicate an incomplete response or an error. For example, an error may be a notification that an address to which the request was sent is unresolvable or a requested resource no longer exits. The failure of the request being fulfilled will preclude crawling and indexing of the native application instance 122 . Such a result may be desirable to ensure that the search system 110 provides search results for only deep links for which content is available.
  • a request is deemed fulfilled even if the content received indicates an incomplete response or an error. This can occur when it is desired to index a native application using “best efforts.” Thus, even if all the requested content is not available, at least the content received will be crawled and indexed.
  • the process 300 determines if a request timeout has occurred ( 308 ). This stage may be optional, and can be implemented when it is desired to index a native application using best efforts as described above.
  • the request time can be a time period that is selected so that at the expiration of the time period the request is likely to have been fulfilled but for an error.
  • the time can be selected based on historical observations, or can be a fixed time period, e.g., five seconds. The time period is measured from the time the request handler 124 sent the request.
  • the process 300 determines the request timeout has occurred, then the process 300 determines the request is fulfilled ( 306 ). Otherwise, the process 300 determines the request is not fulfilled ( 310 ).
  • the thread monitor 126 can begin monitoring the status of threads in the native application instance.
  • FIG. 4 is a flow diagram of an example process 400 for monitoring inter-process communication (IPC) calls for threads.
  • the process 400 is done for a set of monitored threads.
  • the process 400 monitors IPC calls ( 402 ).
  • the IPC calls are used to exchange data among threads.
  • only IPC calls related to the monitored threads are monitored. For example, an IPC that is unrelated to any of the monitored threads is not monitored by the thread monitor 126 , as its fulfillment is unlikely to have an effect on the data displayed in the user interface.
  • the monitoring of the IPC calls can be done by instrumenting the native application 107 , or by a separate process run on the OS emulator 120 .
  • the process 400 determines if each monitored IPC call is fulfilled ( 402 ).
  • an IPC call is determined to be fulfilled when a return value is received.
  • the thread monitor 126 in response to detecting the transmission of a call and its data from a local process and address space to a remote process and address space, will monitor for the expected return values that are transmitted in the opposite direction. When the return values are observed, the IPC call is determined to be fulfilled.
  • the process 400 determines each monitored IPC call is fulfilled, then the process conducts the remaining thread status check(s) ( 406 ). For example, the thread monitor 126 may perform other process checks to determine if a set of monitored threads is idle. Alternatively, if no other checks are to be performed, the thread monitor 126 may determine the set of threads are idle.
  • the process 400 determines each monitored IPC call is not fulfilled, e.g., if one or more IPC called is not fulfilled, then the process determines the threads are not idle ( 408 ). Monitoring may then continue.
  • FIG. 5 is a flow diagram of an example process 500 for monitoring user interface (UI) worker threads. The process 500 is done for a set of monitored threads.
  • UI user interface
  • the process 500 monitors UI worker threads ( 502 ).
  • the thread monitor for example, may determine processor utilization for each UI worker thread.
  • the process 500 determines if each monitored UI worker thread is idle ( 502 ). For example, if each thread is less than a minimum utilization threshold, the threads will be determined to be idle ( 506 ). Conversely, if one or more threads are processing above the minimum utilization threshold, the threads are determined not to be idle ( 508 ). Other checks can be made to determine whether a set of threads is idle. For example, a message queue for the set of threads may be checked to determine whether it is empty. An empty queue will indicate the threads are idle (or may be a predicate for determining whether each thread is idle), while a queue with one or more messages may preclude a determination that the threads are idle.
  • the users may be provided with an opportunity to control whether programs or features collect user information (e.g., information about a user's social network, social actions or activities, profession, a user's preferences, or a user's current location), or to control whether and/or how to receive content from the content server that may be more relevant to the user.
  • user information e.g., information about a user's social network, social actions or activities, profession, a user's preferences, or a user's current location
  • certain data may be treated in one or more ways before it is stored or used, so that personally identifiable information is removed.
  • a user's identity may be treated so that no personally identifiable information can be determined for the user, or a user's geographic location may be generalized where location information is obtained (such as to a city, ZIP code, or state level), so that a particular location of a user cannot be determined.
  • location information such as to a city, ZIP code, or state level
  • the user may have control over how information is collected about the user and used by a content server.
  • Embodiments of the subject matter and the operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them.
  • Embodiments of the subject matter described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions, encoded on computer storage medium for execution by, or to control the operation of, data processing apparatus.
  • a computer storage medium can be, or be included in, a computer-readable storage device, a computer-readable storage substrate, a random or serial access memory array or device, or a combination of one or more of them.
  • a computer storage medium is not a propagated signal, a computer storage medium can be a source or destination of computer program instructions encoded in an artificially-generated propagated signal.
  • the computer storage medium can also be, or be included in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices).
  • the operations described in this specification can be implemented as operations performed by a data processing apparatus on data stored on one or more computer-readable storage devices or received from other sources.
  • the term “data processing apparatus” encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, a system on a chip, or multiple ones, or combinations, of the foregoing.
  • the apparatus can include special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
  • the apparatus can also include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or a combination of one or more of them.
  • the apparatus and execution environment can realize various different computing model infrastructures, such as web services, distributed computing and grid computing infrastructures.
  • a computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, object, or other unit suitable for use in a computing environment.
  • a computer program may, but need not, correspond to a file in a file system.
  • a program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub-programs, or portions of code).
  • a computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.
  • the processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform actions by operating on input data and generating output.
  • the processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., a FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
  • special purpose logic circuitry e.g., a FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
  • processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer.
  • a processor will receive instructions and data from a read-only memory or a random access memory or both.
  • the essential elements of a computer are a processor for performing actions in accordance with instructions and one or more memory devices for storing instructions and data.
  • a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks.
  • mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks.
  • a computer need not have such devices.
  • a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio or video player, a game console, a Global Positioning System (GPS) receiver, or a portable storage device (e.g., a universal serial bus (USB) flash drive), to name just a few.
  • Devices suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks.
  • the processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
  • a computer having a display device, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer.
  • a display device e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor
  • keyboard and a pointing device e.g., a mouse or a trackball
  • Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input.
  • a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a
  • Embodiments of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a user computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components.
  • the components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network.
  • Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks).
  • LAN local area network
  • WAN wide area network
  • inter-network e.g., the Internet
  • peer-to-peer networks e.g., ad hoc peer-to-peer networks.
  • the computing system can include users and servers.
  • a user and server are generally remote from each other and typically interact through a communication network. The relationship of user and server arises by virtue of computer programs running on the respective computers and having a user-server relationship to each other.
  • a server transmits data (e.g., an HTML page) to a user device (e.g., for purposes of displaying data to and receiving user input from a user interacting with the user device).
  • Data generated at the user device e.g., a result of the user interaction

Abstract

Methods, systems, and apparatus, including computer programs encoded on a computer storage medium, for determining when an application is sufficiently instantiated to be subject to a crawling operation. In one aspect, a method includes instantiating an instance of a native application that generates environment instances for display on a user device within the native application instance; monitoring requests for content sent from the native application instance to serving entities that are external to the native application instance; determining whether each monitored request has been fulfilled; in response to determining that the requests are fulfilled: determining whether each thread in a set of threads of the native application instance is idle, generating a load signal in response to determining each thread in the set of thread of the native application instance is idle, the load signal indicating the native application instance is sufficiently instantiated to be subject to a crawling operation.

Description

BACKGROUND
The Internet provides access to a wide variety of information. For example, digital image files, video and/or audio files, as well as web page resources for particular subjects or particular news articles, are accessible over the Internet. With respect to web page resources, many of these resources are designed to facilitate the performing of particular functions, such as banking, booking hotel reservations, shopping, etc., or to provide structured information, such as on-line encyclopedias, movie databases, etc.
Furthermore, with the advent of tablet computers and smart phones, native applications that facilitate the performance of the same functions facilitated by the use of web page resources are now being provided in large numbers. Additionally, native applications that do not have websites with synchronous content, such as games, are also very popular on tablet computers and smart phones. Accordingly, search systems now also facilitate searching of these native applications.
One process by which search systems gather information for native applications is by accessing “deep links” for the native applications. A deep link is an instruction specifying a particular environment instance of a native application and configured to cause the native application to instantiate the environment instance of the specified native application when selected at a user device. The native application generates the environment instance for display within the native application on a user device.
Once the native application is instantiated, the search system may crawl and index the content provided in the environmental instance. The native application, however, should be fully instantiated before the crawling and indexing operation beings, otherwise some information may not be indexed.
SUMMARY
This specification describes technologies relating to monitoring application loading to determine when an application is sufficiently instantiated to be subject to a crawling operation.
In general, one innovative aspect of the subject matter described in this specification can be embodied in methods that include the actions of instantiating an instance of a native application that generates environment instances for display on a user device within the native application instance; monitoring requests for content sent from the native application instance to serving entities that are external to the native application instance; determining whether each monitored request has been fulfilled; in response to determining that each monitored request has been fulfilled: determining whether each thread in a set of threads of the native application instance is idle, generating a load signal in response to determining each thread in the set of thread of the native application instance is idle, the load signal indicating the native application instance is sufficiently instantiated to be subject to a crawling operation. Other embodiments of this aspect include corresponding systems, apparatus, and computer programs, configured to perform the actions of the methods, encoded on computer storage devices.
Particular embodiments of the subject matter described in this specification can be implemented so as to realize one or more of the following advantages. By monitoring both request and thread status, the system does not need to rely on a fixed timeout and thus makes better use of resources than other systems that require fixed timeout based requests. Further, the monitoring of both requests and threads decreases the likelihood that content for high-latency requests may be omitted from indexing operations. The method also automatically adjusts to each particular application, and need not be individually tuned or otherwise require application-specific parameters. Should a particular application be compiled such that its threads are not be accessible for monitoring, the system will still be able to provide a “best efforts” estimate of when a load is done by relying on the status of the monitored requests.
The details of one or more embodiments of the subject matter described in this specification are set forth in the accompanying drawings and the description below. Other features, aspects, and advantages of the subject matter will become apparent from the description, the drawings, and the claims.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a block diagram of an example environment in which native applications are indexed in response to determining the native applications are sufficiently instantiated.
FIG. 2 is a flow diagram of an example process for determining whether an application is sufficiently instantiated.
FIG. 3 is a flow diagram of an example process for determining whether a request has been fulfilled.
FIG. 4 is a flow diagram of an example process for monitoring inter-process communication (IPC) calls for threads.
FIG. 5 is a flow diagram of an example process for monitoring user interface (UI) worker threads.
Like reference numbers and designations in the various drawings indicate like elements.
DETAILED DESCRIPTION
A system receives a set of deep links for a native application and, for each deep link, instantiates the native application in preparation for crawling and indexing content provided by the native application in response to the deep link. As used herein, a native application generates environment instances for display on a user device within an environment of the native application, and operates independent of a browser application on the user device. A native application is an application specifically designed to run on a particular user device operating system and machine firmware. Native applications thus differ from browser-based applications and browser-rendered resources. The latter require all, or at least some, elements or instructions downloaded from a web server each time they are instantiated or rendered. Furthermore, browser-based applications and browser-rendered resources can be processed by all web-capable mobile devices within the browser and thus are not operating system specific.
A deep link is an instruction specifying a particular environment instance of a native application and configured to cause the native application to instantiate the environment instance of the specified native application when selected at a user device. The native application generates the environment instance for display within the native application on a user device. For example, a deep link may specify a selection menu for a game environment; or content from a website, such as a news site, forum, and the like; or a particular recipe for a cooking application; and the like.
To properly crawl and index native application content, the system must determine when the native application is sufficiently instantiated, e.g., finished loading and displaying the content that should be crawled for the deep link. Applications, however, may go through many states: fetching some content, processing the content, showing intermediate results before displaying final results, etc.
The system and methods in this specification perform an automatic and application-independent way of determining when an application is sufficiently instantiated for a crawling and indexing operation. In some implementations, a system monitors requests sent by the native application in response to instantiation, and determines when the requests have been fulfilled. When the requests have been fulfilled, the system determines if a set of threads for the native application are idle. The set of threads being idle after the requests are fulfilled is interpreted as a signal that the native application is sufficiently instantiated for a crawling and indexing operation. In response, the system generates a load signal, which causes a search system to crawl the content output by the native application and index the content.
These features and additional features are described in more detail below.
FIG. 1 is a block diagram of an example environment 100 in which native applications are indexed in response to determining the native applications are sufficiently instantiated.
A computer network 102, such as the Internet, connects resource publisher web sites 104, application publishers 106, user devices 108 and a search system 110.
A resource publisher website 104 includes one or more web resources 105 associated with a domain and hosted by one or more servers in one or more locations. Generally, a resource publisher website is a collection of web pages formatted in hypertext markup language (HTML) that can contain text, images, multimedia content, and programming elements. Each website 104 is maintained by a content publisher, which is an entity that controls, manages and/or owns the website 104.
A web page resource is any data that can be provided by a publisher website 104 over the network 102 and that has a resource address, e.g., a uniform resource locator (URL). Web resources may be HTML pages, images files, video files, audio files, and feed sources, to name just a few. The resources may include embedded information, e.g., meta information and hyperlinks, and/or embedded instructions, e.g., client-side scripts.
An application publisher website 106 may also include one or more web resources 105, and also provides native applications 107. As described above, a native application 107 is an application specifically designed to run on a particular user device operating system and machine firmware. As used in this specification, an “environment instance” is a display environment within a native application and in which is displayed content, such as text, images, and the like. An environment instance is specific to the particular native application, and the native application is specific to the particular operating system of the user device 108. An environment instance differs from a rendered web resource in that the environment instance is generated within and specific to the native application, while a web resource may be rendered in any browser for which the web page resource is compatible, and is independent of the operating system of the user device.
A user device 108 is an electronic device that is under the control of a user. A user device 108 is typically capable of requesting and receiving web page resources 104 and native applications 107 over the network 102. Example user devices 108 include personal computers, mobile communication devices, and tablet computers.
To search web resources 105 and the native applications 107, the search system 110 accesses a web index 112 and an application index 114. The web index 112 is an index of web resources 105 that has, for example, been built from crawling the publisher web sites 104. The application index 114 is an index of environment instances for native applications 107, and is constructed using an indexer 114 that receives data crawled from an application instance 122 of a native application. Although shown as separate indexes, the web index 112 and the application index 114 can be combined in a single index.
The user devices 108 submit search queries to the search system 110. In response to each query, the search system 110 accesses the web index 112 and the application index 114 to identify resources and applications, respectively, that are relevant to the query. The search system 110 may, for example, identify the resources and applications in the form of web resource search results and native application search results, respectively. Once generated, the search results are provided to the user device 108 from which the query was received.
A web resource search result is data generated by the search system 110 that identifies a web resource and provides information that satisfies a particular search query. A web resource search result for a resource can include a web page title, a snippet of text extracted from the resource, and a resource locator for the resource, e.g., the URL of a web page. A native application search result specifies a native application and is generated in response to a search of the application index 114 of environment instances. A native application search results includes a “deep link” specifying a particular environment instance of the native application and which is configured to cause the native application to instantiate the specified environmental instance. For example, selection of a native application search result may cause the native application to launch (if installed on the user device 108) and generate an environment instance referenced in the application search result in the form of a screen shot.
As described above, publishers 106 that provide native applications 107 also provide deep links to the search system 110. Furthermore, third parties may also provide deep links for native applications. Additionally, the search system 110 can discover deep links from other multiple sources, such as app maps, web page annotations, etc., and thus the set of deep links may be constantly changing. For example, an application publisher may provide a list of deep links 109 in the form of uniform resource identifiers (URIs) (or other instruction types that are specific to the native application published by the publisher). These deep links are deep links that publisher 106 desires to be crawled and indexed in the application index 114.
To crawl and index the native applications 107, the search system 110, or a system associated with the search system 110, uses an operating system emulator 120 that emulates an operating system on which native applications 107 are executed. The operating system emulator 120 instantiates an instance 122 of a native application for each deep link 108. During instantiation, a load detector 130 receives data from a request monitor 124 and a thread monitor 126, and, using the received data, determines if the native application instance 122 is sufficiently instantiated for a crawling and indexing operation. When the load detector determines the native application instance 122 is sufficiently instantiated for the crawling and indexing operation, the load detector 130 generates a load signal. A data extractor 128 receives the load signal, and in response crawls the content of the native application instance 122. The crawled content is provided to the indexer 140, which then indexes the content of the native application in the application index 114.
While the examples below are described in the context of an emulator 120, other devices and environments can be used for monitoring the status of an application. For example, a virtual machine or even an instrumented mobile device can be used.
Generation of the load signal is described in more detail with reference to FIG. 2, which is a flow diagram of an example process 200 for determining whether an application is loaded. The process 200 can be implemented in a data processing apparatus, such as one or more computers in data communication.
The process 200 instantiates an instance of a native application (202). For example, the OS emulator 120 selects a deep link 108 to instantiate a native application. The OS emulator 120 is configured to instrument the instance 122 of the native application so that the request monitor 124 and thread monitor 126 can monitor the status of requests and threads. For example, the thread monitor 126 may be a process that is loaded in the same application process space, such as by loading a shared library with the application instance 122, and is thus able to monitor thread status of the application instance 122. The request monitor 124 can be loaded in a similar manner, or can be loaded entirely separate from the application instance 122.
The process 200 monitors requests for content sent from the native application instance to serving entities that are external to the native application instance (202). For example, the request monitor 124 may be configured to act as a proxy that intercepts requests, logs the requests, and then sends the requests to the external services. The time the request was sent is monitored by the request monitor 124 and the content received in response to the request is also monitored. When content is received in response to a request, the request monitor 124 provides the content to the application instance 122.
The process 200 determines whether each monitored request is fulfilled (206). For each request, the request monitor 124 determines, for example, whether content has been received for the request. If content has been received for a request, the request monitor 124 may determine whether the content is responsive to the request. Additionally, the request monitor 124 may also determine if a request has timed out, e.g., a response has not been received within a predefined timeout period. FIG. 3 below describes in more detail an example process 300 of determining whether a request is fulfilled.
If the process 200 determines each monitored request is not fulfilled, e.g., if at least one monitored request is not fulfilled, then the process returns to stage 204. However, if the process 200 determines each monitored request is fulfilled, then the process 200 waits for a timer period (208). This step is optional, as indicated by phantom process block. The timer period is selected to provide enough time for the application instance to process the content received from the requests.
The process 200 then checks the status of threads in a set of threads (210). The thread status for the set may include, for example, processor utilization for the thread, whether the thread has any unfilled IPC calls, and whether a message queue for the threads is empty. The status of other features can also be considered. Examples of thread status checks are described with reference to FIGS. 4 and 5 below.
Not all threads of the native application instance 122 need be monitored. For example, certain background threads unrelated to the user interface may be omitted from the monitoring process. In some implementations, only UI threads are monitored, as the UI threads are responsible for processing the content that is displayed by the native application instance 122 and that is crawled and indexed.
The process 200 determines, based on the status of the threads, whether each thread is idle (212). For example, if each thread has very low processor utilization, has no associated IPC call that is unfulfilled, and a message queue for the threads is empty, then the process 200 may determine that each thread is idle. All of these features, however, need not be checked to make the determination; for example, the determination can be made solely on the processing utilization of each thread.
If the process 200 determines each thread is not idle, e.g., at least one thread is not idle, then the process returns to stage 210. Otherwise, if the process 200 determines each thread is idle, then the process 200 generates the load signal (214). The load signal is then provided to the data extractor 128, which then beings the crawling process to collect data for indexing by the indexer 140.
FIG. 3 is a flow diagram of an example process 300 for determining whether a request has been fulfilled. The process 300 is done for each monitored request.
The process 300 monitors a request (302). For example, as described above, the request monitor 124 monitors for content to be returned for the request.
The process 300 determines content is returned for the request (304). If content is returned for the request, then the process may determine that the request is fulfilled (306), depending on the content returned. For example, in some implementations, a request is deemed fulfilled only if the content received is responsive to the request, and does not indicate an incomplete response or an error. For example, an error may be a notification that an address to which the request was sent is unresolvable or a requested resource no longer exits. The failure of the request being fulfilled will preclude crawling and indexing of the native application instance 122. Such a result may be desirable to ensure that the search system 110 provides search results for only deep links for which content is available.
In other implementations, a request is deemed fulfilled even if the content received indicates an incomplete response or an error. This can occur when it is desired to index a native application using “best efforts.” Thus, even if all the requested content is not available, at least the content received will be crawled and indexed.
If the process 300 determines content is not returned for the request, then the process 300 determines if a request timeout has occurred (308). This stage may be optional, and can be implemented when it is desired to index a native application using best efforts as described above. The request time can be a time period that is selected so that at the expiration of the time period the request is likely to have been fulfilled but for an error. The time can be selected based on historical observations, or can be a fixed time period, e.g., five seconds. The time period is measured from the time the request handler 124 sent the request.
If the process 300 determines the request timeout has occurred, then the process 300 determines the request is fulfilled (306). Otherwise, the process 300 determines the request is not fulfilled (310).
Once the process 300 determines all requests for the native application instance are fulfilled, the thread monitor 126 can begin monitoring the status of threads in the native application instance.
FIG. 4 is a flow diagram of an example process 400 for monitoring inter-process communication (IPC) calls for threads. The process 400 is done for a set of monitored threads.
The process 400 monitors IPC calls (402). The IPC calls are used to exchange data among threads. In some implementations, only IPC calls related to the monitored threads are monitored. For example, an IPC that is unrelated to any of the monitored threads is not monitored by the thread monitor 126, as its fulfillment is unlikely to have an effect on the data displayed in the user interface. The monitoring of the IPC calls can be done by instrumenting the native application 107, or by a separate process run on the OS emulator 120.
The process 400 determines if each monitored IPC call is fulfilled (402). In some implementations, an IPC call is determined to be fulfilled when a return value is received. For example, the thread monitor 126, in response to detecting the transmission of a call and its data from a local process and address space to a remote process and address space, will monitor for the expected return values that are transmitted in the opposite direction. When the return values are observed, the IPC call is determined to be fulfilled.
If the process 400 determines each monitored IPC call is fulfilled, then the process conducts the remaining thread status check(s) (406). For example, the thread monitor 126 may perform other process checks to determine if a set of monitored threads is idle. Alternatively, if no other checks are to be performed, the thread monitor 126 may determine the set of threads are idle.
If, however, the process 400 determines each monitored IPC call is not fulfilled, e.g., if one or more IPC called is not fulfilled, then the process determines the threads are not idle (408). Monitoring may then continue.
FIG. 5 is a flow diagram of an example process 500 for monitoring user interface (UI) worker threads. The process 500 is done for a set of monitored threads.
The process 500 monitors UI worker threads (502). The thread monitor, for example, may determine processor utilization for each UI worker thread.
The process 500 determines if each monitored UI worker thread is idle (502). For example, if each thread is less than a minimum utilization threshold, the threads will be determined to be idle (506). Conversely, if one or more threads are processing above the minimum utilization threshold, the threads are determined not to be idle (508). Other checks can be made to determine whether a set of threads is idle. For example, a message queue for the set of threads may be checked to determine whether it is empty. An empty queue will indicate the threads are idle (or may be a predicate for determining whether each thread is idle), while a queue with one or more messages may preclude a determination that the threads are idle.
In situations in which the systems discussed here collect personal information about users, or may make use of personal information, the users may be provided with an opportunity to control whether programs or features collect user information (e.g., information about a user's social network, social actions or activities, profession, a user's preferences, or a user's current location), or to control whether and/or how to receive content from the content server that may be more relevant to the user. In addition, certain data may be treated in one or more ways before it is stored or used, so that personally identifiable information is removed. For example, a user's identity may be treated so that no personally identifiable information can be determined for the user, or a user's geographic location may be generalized where location information is obtained (such as to a city, ZIP code, or state level), so that a particular location of a user cannot be determined. Thus, the user may have control over how information is collected about the user and used by a content server.
Embodiments of the subject matter and the operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Embodiments of the subject matter described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions, encoded on computer storage medium for execution by, or to control the operation of, data processing apparatus.
A computer storage medium can be, or be included in, a computer-readable storage device, a computer-readable storage substrate, a random or serial access memory array or device, or a combination of one or more of them. Moreover, while a computer storage medium is not a propagated signal, a computer storage medium can be a source or destination of computer program instructions encoded in an artificially-generated propagated signal. The computer storage medium can also be, or be included in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices).
The operations described in this specification can be implemented as operations performed by a data processing apparatus on data stored on one or more computer-readable storage devices or received from other sources.
The term “data processing apparatus” encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, a system on a chip, or multiple ones, or combinations, of the foregoing. The apparatus can include special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit). The apparatus can also include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or a combination of one or more of them. The apparatus and execution environment can realize various different computing model infrastructures, such as web services, distributed computing and grid computing infrastructures.
A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, object, or other unit suitable for use in a computing environment. A computer program may, but need not, correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub-programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.
The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform actions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., a FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for performing actions in accordance with instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio or video player, a game console, a Global Positioning System (GPS) receiver, or a portable storage device (e.g., a universal serial bus (USB) flash drive), to name just a few. Devices suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
To provide for interaction with a user, embodiments of the subject matter described in this specification can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's user device in response to requests received from the web browser.
Embodiments of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a user computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks).
The computing system can include users and servers. A user and server are generally remote from each other and typically interact through a communication network. The relationship of user and server arises by virtue of computer programs running on the respective computers and having a user-server relationship to each other. In some embodiments, a server transmits data (e.g., an HTML page) to a user device (e.g., for purposes of displaying data to and receiving user input from a user interacting with the user device). Data generated at the user device (e.g., a result of the user interaction) can be received from the user device at the server.
While this specification contains many specific implementation details, these should not be construed as limitations on the scope of any inventions or of what may be claimed, but rather as descriptions of features specific to particular embodiments of particular inventions. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination.
Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products.
Thus, particular embodiments of the subject matter have been described. Other embodiments are within the scope of the following claims. In some cases, the actions recited in the claims can be performed in a different order and still achieve desirable results. In addition, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In certain implementations, multitasking and parallel processing may be advantageous.

Claims (21)

What is claimed is:
1. A computer-implemented method performed by data processing apparatus, the method comprising:
instantiating, in a computer, an instance of a native application that generates environment instances for display on a user device within the native application instance;
monitoring, at the computer, requests for content sent from the native application instance executing in the computer to serving entities that are external to the native application instance and the computer;
determining whether each monitored request of the requests has been fulfilled indicating no monitored request is unfulfilled;
in response to determining that each monitored request of the requests has been fulfilled:
determining whether each thread in a set of threads of the native application instance is idle, wherein the determination of whether each thread in the set of threads of the native application instance is idle is done after the determination that each monitored request in the set of requests have been fulfilled;
generating a load signal in response to determining that each thread in the set of threads of the native application instance is idle, the load signal indicating the native application instance is finished loading sufficiently instantiated to be subject to a crawling operation; and
in response to the load signal, crawling content of the native application instance.
2. The computer-implemented method of claim 1, wherein determining whether each thread in the set of threads of the native application instance is idle comprises:
initiating a timer in response to determining that each monitored request has been fulfilled, the timer expiring after a timer period; and
determining whether each thread in the set of threads of the native application instance is idle only after the time expires after the timer period.
3. The computer-implemented method of claim 2, wherein determining whether each monitored request has been fulfilled comprises determining, for each monitored request, that content requested by each request has been received by the instance of the native application in response to the request.
4. The computer-implemented method of claim 3, wherein determining whether each thread in the set of threads of the native application instance is idle comprises:
monitoring inter-process communication (IPC) calls of the threads; and
determining the set of threads of the native application instance are not idle when at least one IPC call is not fulfilled.
5. The computer-implemented method of claim 4, wherein determining whether each thread in the set of threads of the native application instance is idle further comprises determining whether each thread in a set of user interface (UI) worker threads is idle.
6. The computer-implemented method of claim 5, wherein determining whether each thread in the set of threads of the native application instance is idle further comprises:
determining whether a message queue for the UI worker threads is empty; and
determining whether each thread in the UI worker threads is idle in response to determining the message queue for the UI worker threads is idle.
7. The computer-implemented method of claim 1, wherein determining whether each monitored request has been fulfilled comprises determining, for each monitored request, that content requested by each request has been received by the instance of the native application in response to the request.
8. The computer-implemented method of claim 1, wherein determining whether each monitored request has been fulfilled comprises determining, for each monitored request, that content requested by each request has been received by the instance of the native application in response to the request or that the request has timed out.
9. The computer-implemented method of claim 1, wherein determining whether each thread in the set of threads of the native application instance is idle comprises:
monitoring inter-process communication (IPC) calls of the threads; and
determining the set of threads of the native application instance are not idle when at least one IPC call is not fulfilled.
10. The computer-implemented method of claim 1, determining whether each thread in the set of threads of the native application instance is idle comprises determining whether each thread in a set of user interface (UI) worker threads is idle.
11. The computer-implemented method of claim 10, wherein determining whether each thread in the set of threads of the native application instance is idle further comprises:
determining whether a message queue for the UI worker threads is empty; and
determining whether each thread in the UI worker threads is idle in response to determining the message queue for the UI worker threads is idle.
12. A non-transitory computer storage medium encoded with a computer program, the program comprising instructions that when executed by data processing apparatus cause the data processing apparatus to perform operations comprising:
instantiating, in a computer, an instance of a native application that generates environment instances for display on a user device within the native application instance;
monitoring, at the computer, requests for content sent from the native application instance executing in the computer to serving entities that are external to the native application instance and the computer;
determining whether each monitored request of the requests has been fulfilled indicating no monitored request is unfulfilled;
in response to determining that each monitored request of the requests has been fulfilled:
determining whether each thread in a set of threads of the native application instance is idle, wherein the determination of whether each thread in the set of threads of the native application instance is idle is done after the determination that each monitored request in the set of requests has been fulfilled;
generating a load signal in response to determining that each thread in the set of threads of the native application instance is idle, the load signal indicating the native application instance is finished loading to be subject to a crawling operation; and
in response to the load signal, crawling content of the native application instance.
13. A system, comprising:
a data processing apparatus; and
software stored in non-transitory computer readable storage medium storing instructions executable by the data processing apparatus and that upon such execution cause the data processing apparatus to perform operations comprising:
instantiating, in a computer, an instance of a native application that generates environment instances for display on a user device within the native application instance;
monitoring, at the computer, requests for content sent from the native application instance executing in the computer to serving entities that are external to the native application instance and the computer;
determining whether each monitored request of the requests has been fulfilled indicating no monitored request is unfulfilled;
in response to determining that each monitored request of the requests has been fulfilled:
determining whether each thread in a set of threads of the native application instance is idle, wherein the determination of whether each thread in the set of threads of the native application instance is idle is done after the determination that each monitored request in the set of requests has been fulfilled;
generating a load signal in response to determining that each thread in the set of threads of the native application instance is idle, the load signal indicating the native application instance is finished loading to be subject to a crawling operation; and
in response to the load signal, crawling content of the native application instance.
14. The system of claim 13, wherein determining whether each thread in the set of threads of the native application instance is idle comprises:
initiating a timer in response to determining that the each monitored request has been fulfilled, the timer expiring after a timer period; and
determining whether each thread in the set of threads of the native application instance is idle only after the time expires after the timer period.
15. The system of claim 14, wherein determining whether each monitored request has been fulfilled comprises determining, for each monitored request, that content requested by each request has been received by the instance of the native application in response to the request.
16. The system of claim 15, wherein determining whether each thread in the set of threads of the native application instance is idle comprises:
monitoring inter-process communication (IPC) calls of the threads; and
determining the set of threads of the native application instance are not idle when at least one IPC call is not fulfilled.
17. The system of claim 16, wherein determining whether each thread in the set of threads of the native application instance is idle further comprises determining whether each thread in a set of user interface (UI) worker threads is idle.
18. The system of claim 17, wherein determining whether each thread in the set of threads of the native application instance is idle further comprises:
determining whether a message queue for the UI worker threads is empty; and
determining whether each thread in the UI worker threads is idle in response to determining the message queue for the UI worker threads is idle.
19. The system of claim 13, wherein determining whether each monitored request has been fulfilled comprises determining, for each monitored request, that content requested by each request has been received by the instance of the native application in response to the request or that the request has timed out.
20. The system of claim 13, wherein determining whether each thread in the set of threads of the native application instance is idle comprises:
monitoring inter-process communication (IPC) calls of the threads; and
determining the set of threads of the native application instance are not idle when at least one IPC call is not fulfilled.
21. The system of claim 13, wherein determining whether each thread in the set of threads of the native application instance is idle comprises determining whether each thread in a set of user interface (UI) worker threads is idle.
US14/243,030 2014-04-02 2014-04-02 Monitoring application loading Active 2035-01-09 US9513961B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US14/243,030 US9513961B1 (en) 2014-04-02 2014-04-02 Monitoring application loading

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/243,030 US9513961B1 (en) 2014-04-02 2014-04-02 Monitoring application loading

Publications (1)

Publication Number Publication Date
US9513961B1 true US9513961B1 (en) 2016-12-06

Family

ID=57400026

Family Applications (1)

Application Number Title Priority Date Filing Date
US14/243,030 Active 2035-01-09 US9513961B1 (en) 2014-04-02 2014-04-02 Monitoring application loading

Country Status (1)

Country Link
US (1) US9513961B1 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190080685A1 (en) * 2017-09-08 2019-03-14 Amazon Technologies, Inc. Systems and methods for enhancing user experience by communicating transient errors
CN111625370A (en) * 2019-02-27 2020-09-04 杭州海康威视系统技术有限公司 Message pushing method and device, electronic equipment and storage medium
CN112527413A (en) * 2020-12-23 2021-03-19 平安普惠企业管理有限公司 Page loading method, device, equipment and storage medium
US20210312125A1 (en) * 2020-04-03 2021-10-07 Beijing Baidu Netcom Science And Technology Co., Ltd. Method, device, and storage medium for parsing document

Citations (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5961584A (en) * 1994-12-09 1999-10-05 Telefonaktiebolaget Lm Ericsson System for managing internal execution threads
US6006235A (en) * 1997-11-26 1999-12-21 International Business Machines Corporation Method and apparatus for invoking a stored procedure or a user defined interpreted language function in a database management system
US6275983B1 (en) * 1993-07-19 2001-08-14 Object Technology Licensing Corp. Object-oriented operating system
US20010054020A1 (en) * 2000-03-22 2001-12-20 Barth Brian E. Method and apparatus for dynamic information connection engine
US6351755B1 (en) * 1999-11-02 2002-02-26 Alta Vista Company System and method for associating an extensible set of data with documents downloaded by a web crawler
US6377984B1 (en) * 1999-11-02 2002-04-23 Alta Vista Company Web crawler system using parallel queues for queing data sets having common address and concurrently downloading data associated with data set in each queue
US6418433B1 (en) * 1999-01-28 2002-07-09 International Business Machines Corporation System and method for focussed web crawling
US20020144003A1 (en) * 2001-03-30 2002-10-03 Bin Jin Inter-thread communications between different components using double buffer
US20020198985A1 (en) * 2001-05-09 2002-12-26 Noam Fraenkel Post-deployment monitoring and analysis of server performance
US20030115189A1 (en) * 2001-12-19 2003-06-19 Narayan Srinivasa Method and apparatus for electronically extracting application specific multidimensional information from documents selected from a set of documents electronically extracted from a library of electronically searchable documents
US20030115188A1 (en) * 2001-12-19 2003-06-19 Narayan Srinivasa Method and apparatus for electronically extracting application specific multidimensional information from a library of searchable documents and for providing the application specific information to a user application
US20030200254A1 (en) * 2000-12-19 2003-10-23 Coach Wei Methods and techniques for delivering rich java applications over thin-wire connections with high performance and scalability
US20040030882A1 (en) 2002-08-08 2004-02-12 Forman George Henry Managed application pre-launching
US6832376B1 (en) * 1999-09-29 2004-12-14 Unisys Corporation Method and apparatus for resuse of a thread for different programmed operations
US20050086359A1 (en) * 2003-10-16 2005-04-21 International Business Machines Corporation Monitoring thread usage to dynamically control a thread pool
US20050229176A1 (en) * 2004-03-22 2005-10-13 Piotr Findeisen Determining processor usage by a thread
US7000242B1 (en) * 2000-07-31 2006-02-14 Jeff Haber Directing internet shopping traffic and tracking revenues generated as a result thereof
US20060048160A1 (en) * 2004-09-02 2006-03-02 International Business Machines Corporation Method, apparatus, and computer program product for providing a self-tunable parameter used for dynamically yielding an idle processor
US20060059146A1 (en) * 2004-09-16 2006-03-16 International Business Machines Corporation Method and system for tracing components of computer applications
US20060230011A1 (en) * 2004-11-22 2006-10-12 Truveo, Inc. Method and apparatus for an application crawler
US7234139B1 (en) * 2000-11-24 2007-06-19 Catharon Productions, Inc. Computer multi-tasking via virtual threading using an interpreter
US20070199001A1 (en) * 2004-08-12 2007-08-23 Telecom Italia S.P.A. Method And System For Reading Data, Related Network And Computer Program Product Therefor
US20070209080A1 (en) 2006-03-01 2007-09-06 Oracle International Corporation Search Hit URL Modification for Secure Application Integration
US20090019312A1 (en) * 2007-07-11 2009-01-15 Bea Systems, Inc. System and Method for Providing an Instrumentation Service Using Dye Injection and Filtering in a SIP Application Server Environment
US20090070766A1 (en) * 2007-09-07 2009-03-12 International Business Machines Corporation Dynamic workload balancing in a thread pool
US20090113440A1 (en) * 2007-10-30 2009-04-30 Dorny Jared B Multiple Queue Resource Manager
US7617225B2 (en) 2004-06-25 2009-11-10 Apple Inc. Methods and systems for managing data created by different applications
US20100100899A1 (en) * 2006-11-15 2010-04-22 British Broadcasting Corporation Accessing content
US20100257466A1 (en) 2009-04-01 2010-10-07 Yahoo! Inc. Method and system for generating a mini-software application corresponding to a web site
US20100306191A1 (en) 2009-05-27 2010-12-02 Lebeau Michael J Computer Application Data In Search Results
US20110066609A1 (en) * 2009-09-14 2011-03-17 International Business Machines Corporation Crawling Browser-Accessible Applications
US20110252038A1 (en) 2010-04-07 2011-10-13 Schmidt Edward T Search extensibility to third party applications
US20110264646A1 (en) * 2010-04-26 2011-10-27 Microsoft Corporation Search Engine Data Structure
US20110276568A1 (en) 2009-07-24 2011-11-10 Krassimir Fotev System and method for ranking content and applications through human assistance
US8060487B2 (en) 2005-08-01 2011-11-15 Sap Ag Searching for and launching data files not associated with an application
US20110307463A1 (en) * 2010-06-11 2011-12-15 Doat Media Ltd. System and Methods Thereof for Enhancing a User's Search Experience
US20110314004A1 (en) 2010-06-18 2011-12-22 Verizon Patent And Licensing, Inc. Cross application execution service
US8086957B2 (en) 2008-05-21 2011-12-27 International Business Machines Corporation Method and system to selectively secure the display of advertisements on web browsers
US20120011167A1 (en) * 2010-07-09 2012-01-12 Nokia Corporation Method and apparatus for aggregating and linking place data
US20120016678A1 (en) 2010-01-18 2012-01-19 Apple Inc. Intelligent Automated Assistant
US20120124061A1 (en) 2010-11-12 2012-05-17 Microsoft Corporation Rich Search Over and Deep Integration with Applications
US20120144281A1 (en) * 2010-12-01 2012-06-07 Microsoft Corporation Automated task completion by flowing context
US20120159510A1 (en) * 2010-12-16 2012-06-21 International Business Machines Corporation Handling and reporting of object state transitions on a multiprocess architecture
EP2474905A2 (en) 2011-01-06 2012-07-11 Mitel Networks Corporation Launching a target application
US20120179955A1 (en) 2011-01-06 2012-07-12 Microsoft Corporation Providing deep links in association with toolbars
EP2495670A1 (en) 2010-11-29 2012-09-05 Hughes Network Systems, LLC Computer networking system and method with javascript execution for pre-fetching content from dynamically-generated url and javascript injection to modify date or random number calculation
US20120284256A1 (en) 2011-05-06 2012-11-08 Microsoft Corporation Location-aware application searching
US20120284247A1 (en) 2011-05-06 2012-11-08 Microsoft Corporation Integrating applications within search results
US20120290584A1 (en) 2011-05-09 2012-11-15 Google Inc. Recommending Applications for Mobile Devices Based on Installation Histories
US20120316955A1 (en) 2011-04-06 2012-12-13 Yahoo! Inc. System and Method for Mobile Application Search
US20120323898A1 (en) 2011-06-16 2012-12-20 Microsoft Corporation Surfacing applications based on browsing activity
US20130006897A1 (en) 2011-07-01 2013-01-03 Google Inc. Predicting user navigation events
US8433620B2 (en) 2010-11-04 2013-04-30 Microsoft Corporation Application store tastemaker recommendations
US20130111328A1 (en) 2011-11-01 2013-05-02 Amit Khanna Launching applications from webpages
US20130110815A1 (en) * 2011-10-28 2013-05-02 Microsoft Corporation Generating and presenting deep links
US20130124606A1 (en) 2011-11-14 2013-05-16 Boopsie, Inc. Automatic personalization of downloadable mobile apps
US20130122861A1 (en) 2011-11-11 2013-05-16 Electronics And Telecommunications Research Institute System and method for verifying apps for smart phone
US20130139182A1 (en) * 2011-11-25 2013-05-30 Microsoft Corporation Integrating An Application Into Operating System Components Of A Mobile Computing Platform
US8458384B2 (en) 2010-02-03 2013-06-04 National Instruments Corporation Automatically launching a measurement application in response to measurement device connection
US20130191360A1 (en) 2012-01-19 2013-07-25 Google Inc. System and method for improving access to search results
US8510764B1 (en) 2012-11-02 2013-08-13 Google Inc. Method and system for deep links in application contexts
US20130212486A1 (en) * 2012-02-15 2013-08-15 Mobilespan Inc. Context determination for mobile devices when accessing remote resources
US20130212484A1 (en) * 2012-02-15 2013-08-15 Mobilespan Inc. Presenting execution of a remote application in a mobile device native format
US20130232256A1 (en) 2011-08-31 2013-09-05 Nhn Corporation System and method for providing ranking information of mobile application
US8554345B2 (en) 2011-11-10 2013-10-08 Cbs Interactive, Inc. APP rating system
US20130283285A1 (en) * 2012-04-23 2013-10-24 Marvell World Trade Ltd. Adjusting Thread Priority to Improve Throughput between Peer-to-peer (P2P) Devices
US20130290854A1 (en) * 2012-04-27 2013-10-31 Adobe Systems Inc. Method and apparatus for isolating analytics logic from content creation in a rich internet application
US20130298007A1 (en) 2012-04-18 2013-11-07 International Business Machines Corporation Determining page loading of user interfaces of web applications
US20130305385A1 (en) * 2012-05-09 2013-11-14 Cloud Cover Music Streaming audio playback service and methodology
US8595450B2 (en) 2003-03-24 2013-11-26 Sony Corporation Application pre-launch to reduce user interface latency
US20130325856A1 (en) 2012-06-04 2013-12-05 Apple Inc. App recommendation using crowd-sourced localized app usage data
US8666938B1 (en) * 2012-03-28 2014-03-04 Vmware, Inc. Installed application cloning and failover to virtual server
US20140136691A1 (en) * 2012-11-13 2014-05-15 Riverbed Technology, Inc. Application monitoring of related activities across multiple threads
US20140188897A1 (en) 2013-01-02 2014-07-03 CrowdChunk LLC CrowdChunk System, Method and Computer Program Product for Searching Summaries of Mobile Apps Reviews
US20140222833A1 (en) * 2012-11-09 2014-08-07 Trusper, Inc. Trusted Social Networks
US20140245141A1 (en) 2013-02-26 2014-08-28 Microsoft Corporation Contextual user assistance for cloud services
US20140244464A1 (en) * 2013-02-27 2014-08-28 Capital One Financial Corporation System and method for providing a user-loadable stored value card
US20140304709A1 (en) * 2013-04-09 2014-10-09 National Instruments Corporation Hardware Assisted Method and System for Scheduling Time Critical Tasks
US8874569B2 (en) 2012-11-29 2014-10-28 Lexisnexis, A Division Of Reed Elsevier Inc. Systems and methods for identifying and visualizing elements of query results
US20140359598A1 (en) 2013-05-29 2014-12-04 Microsoft Corporation Application installation from search results
US20140359519A1 (en) * 2013-05-31 2014-12-04 Microsoft Corporation Determination of Intended Navigation Destination Based on User-Generated and Analysis-Based Information
US20150006328A1 (en) 2012-02-08 2015-01-01 Samsung Electronics Co., Ltd. Method and system for providing distribution-type app store service
US20150038161A1 (en) 2007-10-12 2015-02-05 Gabriel Jakobson Mashing mapping content displayed on mobile devices
US20150052061A1 (en) * 2011-05-26 2015-02-19 Facebook, Inc. Methods and systems for facilitating e-commerce payments
US9002821B2 (en) * 2013-01-16 2015-04-07 Google Inc. Indexing application pages of native applications
US9043333B1 (en) 2014-08-19 2015-05-26 Adlast, Inc. Systems and methods for directing access to products and services
US9104787B2 (en) 2012-12-14 2015-08-11 Microsoft Technology Licensing, Llc Augmenting search results with relevant third-party application content
US9251224B2 (en) 2014-03-04 2016-02-02 Google Inc. Triggering and ranking of native applications

Patent Citations (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275983B1 (en) * 1993-07-19 2001-08-14 Object Technology Licensing Corp. Object-oriented operating system
US5961584A (en) * 1994-12-09 1999-10-05 Telefonaktiebolaget Lm Ericsson System for managing internal execution threads
US6006235A (en) * 1997-11-26 1999-12-21 International Business Machines Corporation Method and apparatus for invoking a stored procedure or a user defined interpreted language function in a database management system
US6418433B1 (en) * 1999-01-28 2002-07-09 International Business Machines Corporation System and method for focussed web crawling
US6832376B1 (en) * 1999-09-29 2004-12-14 Unisys Corporation Method and apparatus for resuse of a thread for different programmed operations
US6351755B1 (en) * 1999-11-02 2002-02-26 Alta Vista Company System and method for associating an extensible set of data with documents downloaded by a web crawler
US6377984B1 (en) * 1999-11-02 2002-04-23 Alta Vista Company Web crawler system using parallel queues for queing data sets having common address and concurrently downloading data associated with data set in each queue
US20010054020A1 (en) * 2000-03-22 2001-12-20 Barth Brian E. Method and apparatus for dynamic information connection engine
US7000242B1 (en) * 2000-07-31 2006-02-14 Jeff Haber Directing internet shopping traffic and tracking revenues generated as a result thereof
US7234139B1 (en) * 2000-11-24 2007-06-19 Catharon Productions, Inc. Computer multi-tasking via virtual threading using an interpreter
US20030200254A1 (en) * 2000-12-19 2003-10-23 Coach Wei Methods and techniques for delivering rich java applications over thin-wire connections with high performance and scalability
US20020144003A1 (en) * 2001-03-30 2002-10-03 Bin Jin Inter-thread communications between different components using double buffer
US20020198985A1 (en) * 2001-05-09 2002-12-26 Noam Fraenkel Post-deployment monitoring and analysis of server performance
US20030115188A1 (en) * 2001-12-19 2003-06-19 Narayan Srinivasa Method and apparatus for electronically extracting application specific multidimensional information from a library of searchable documents and for providing the application specific information to a user application
US20030115189A1 (en) * 2001-12-19 2003-06-19 Narayan Srinivasa Method and apparatus for electronically extracting application specific multidimensional information from documents selected from a set of documents electronically extracted from a library of electronically searchable documents
US20040030882A1 (en) 2002-08-08 2004-02-12 Forman George Henry Managed application pre-launching
US8595450B2 (en) 2003-03-24 2013-11-26 Sony Corporation Application pre-launch to reduce user interface latency
US20050086359A1 (en) * 2003-10-16 2005-04-21 International Business Machines Corporation Monitoring thread usage to dynamically control a thread pool
US20050229176A1 (en) * 2004-03-22 2005-10-13 Piotr Findeisen Determining processor usage by a thread
US7617225B2 (en) 2004-06-25 2009-11-10 Apple Inc. Methods and systems for managing data created by different applications
US20070199001A1 (en) * 2004-08-12 2007-08-23 Telecom Italia S.P.A. Method And System For Reading Data, Related Network And Computer Program Product Therefor
US20060048160A1 (en) * 2004-09-02 2006-03-02 International Business Machines Corporation Method, apparatus, and computer program product for providing a self-tunable parameter used for dynamically yielding an idle processor
US20060059146A1 (en) * 2004-09-16 2006-03-16 International Business Machines Corporation Method and system for tracing components of computer applications
US20060230011A1 (en) * 2004-11-22 2006-10-12 Truveo, Inc. Method and apparatus for an application crawler
US8060487B2 (en) 2005-08-01 2011-11-15 Sap Ag Searching for and launching data files not associated with an application
US20070209080A1 (en) 2006-03-01 2007-09-06 Oracle International Corporation Search Hit URL Modification for Secure Application Integration
US20100100899A1 (en) * 2006-11-15 2010-04-22 British Broadcasting Corporation Accessing content
US20090019312A1 (en) * 2007-07-11 2009-01-15 Bea Systems, Inc. System and Method for Providing an Instrumentation Service Using Dye Injection and Filtering in a SIP Application Server Environment
US20090070766A1 (en) * 2007-09-07 2009-03-12 International Business Machines Corporation Dynamic workload balancing in a thread pool
US20150038161A1 (en) 2007-10-12 2015-02-05 Gabriel Jakobson Mashing mapping content displayed on mobile devices
US20090113440A1 (en) * 2007-10-30 2009-04-30 Dorny Jared B Multiple Queue Resource Manager
US8086957B2 (en) 2008-05-21 2011-12-27 International Business Machines Corporation Method and system to selectively secure the display of advertisements on web browsers
US20100257466A1 (en) 2009-04-01 2010-10-07 Yahoo! Inc. Method and system for generating a mini-software application corresponding to a web site
US20100306191A1 (en) 2009-05-27 2010-12-02 Lebeau Michael J Computer Application Data In Search Results
US20110276568A1 (en) 2009-07-24 2011-11-10 Krassimir Fotev System and method for ranking content and applications through human assistance
US20110066609A1 (en) * 2009-09-14 2011-03-17 International Business Machines Corporation Crawling Browser-Accessible Applications
US20120016678A1 (en) 2010-01-18 2012-01-19 Apple Inc. Intelligent Automated Assistant
US8660849B2 (en) 2010-01-18 2014-02-25 Apple Inc. Prioritizing selection criteria by automated assistant
US8458384B2 (en) 2010-02-03 2013-06-04 National Instruments Corporation Automatically launching a measurement application in response to measurement device connection
US20110252038A1 (en) 2010-04-07 2011-10-13 Schmidt Edward T Search extensibility to third party applications
US20110264646A1 (en) * 2010-04-26 2011-10-27 Microsoft Corporation Search Engine Data Structure
US20110307463A1 (en) * 2010-06-11 2011-12-15 Doat Media Ltd. System and Methods Thereof for Enhancing a User's Search Experience
US20110314004A1 (en) 2010-06-18 2011-12-22 Verizon Patent And Licensing, Inc. Cross application execution service
US8515979B2 (en) 2010-06-18 2013-08-20 Verizon Patent And Licensing, Inc. Cross application execution service
US20120011167A1 (en) * 2010-07-09 2012-01-12 Nokia Corporation Method and apparatus for aggregating and linking place data
US8433620B2 (en) 2010-11-04 2013-04-30 Microsoft Corporation Application store tastemaker recommendations
US20120124061A1 (en) 2010-11-12 2012-05-17 Microsoft Corporation Rich Search Over and Deep Integration with Applications
EP2495670A1 (en) 2010-11-29 2012-09-05 Hughes Network Systems, LLC Computer networking system and method with javascript execution for pre-fetching content from dynamically-generated url and javascript injection to modify date or random number calculation
US20120144281A1 (en) * 2010-12-01 2012-06-07 Microsoft Corporation Automated task completion by flowing context
US20120159510A1 (en) * 2010-12-16 2012-06-21 International Business Machines Corporation Handling and reporting of object state transitions on a multiprocess architecture
US20120179955A1 (en) 2011-01-06 2012-07-12 Microsoft Corporation Providing deep links in association with toolbars
EP2474905A2 (en) 2011-01-06 2012-07-11 Mitel Networks Corporation Launching a target application
US20120179706A1 (en) 2011-01-06 2012-07-12 Mitel Networks Corporation Contextual application launch via search query
US20120316955A1 (en) 2011-04-06 2012-12-13 Yahoo! Inc. System and Method for Mobile Application Search
US20120284256A1 (en) 2011-05-06 2012-11-08 Microsoft Corporation Location-aware application searching
US8688726B2 (en) 2011-05-06 2014-04-01 Microsoft Corporation Location-aware application searching
US20120284247A1 (en) 2011-05-06 2012-11-08 Microsoft Corporation Integrating applications within search results
US20120290584A1 (en) 2011-05-09 2012-11-15 Google Inc. Recommending Applications for Mobile Devices Based on Installation Histories
US20150052061A1 (en) * 2011-05-26 2015-02-19 Facebook, Inc. Methods and systems for facilitating e-commerce payments
US20120323898A1 (en) 2011-06-16 2012-12-20 Microsoft Corporation Surfacing applications based on browsing activity
US20130006897A1 (en) 2011-07-01 2013-01-03 Google Inc. Predicting user navigation events
US20130232256A1 (en) 2011-08-31 2013-09-05 Nhn Corporation System and method for providing ranking information of mobile application
US20130110815A1 (en) * 2011-10-28 2013-05-02 Microsoft Corporation Generating and presenting deep links
US20130111328A1 (en) 2011-11-01 2013-05-02 Amit Khanna Launching applications from webpages
US8554345B2 (en) 2011-11-10 2013-10-08 Cbs Interactive, Inc. APP rating system
US20130122861A1 (en) 2011-11-11 2013-05-16 Electronics And Telecommunications Research Institute System and method for verifying apps for smart phone
US20130124606A1 (en) 2011-11-14 2013-05-16 Boopsie, Inc. Automatic personalization of downloadable mobile apps
US20130139182A1 (en) * 2011-11-25 2013-05-30 Microsoft Corporation Integrating An Application Into Operating System Components Of A Mobile Computing Platform
US20130191360A1 (en) 2012-01-19 2013-07-25 Google Inc. System and method for improving access to search results
US20150006328A1 (en) 2012-02-08 2015-01-01 Samsung Electronics Co., Ltd. Method and system for providing distribution-type app store service
US20130212484A1 (en) * 2012-02-15 2013-08-15 Mobilespan Inc. Presenting execution of a remote application in a mobile device native format
US20130212486A1 (en) * 2012-02-15 2013-08-15 Mobilespan Inc. Context determination for mobile devices when accessing remote resources
US8666938B1 (en) * 2012-03-28 2014-03-04 Vmware, Inc. Installed application cloning and failover to virtual server
US20130298007A1 (en) 2012-04-18 2013-11-07 International Business Machines Corporation Determining page loading of user interfaces of web applications
US20130283285A1 (en) * 2012-04-23 2013-10-24 Marvell World Trade Ltd. Adjusting Thread Priority to Improve Throughput between Peer-to-peer (P2P) Devices
US20130290854A1 (en) * 2012-04-27 2013-10-31 Adobe Systems Inc. Method and apparatus for isolating analytics logic from content creation in a rich internet application
US20130305385A1 (en) * 2012-05-09 2013-11-14 Cloud Cover Music Streaming audio playback service and methodology
US20130325856A1 (en) 2012-06-04 2013-12-05 Apple Inc. App recommendation using crowd-sourced localized app usage data
US8510764B1 (en) 2012-11-02 2013-08-13 Google Inc. Method and system for deep links in application contexts
US20140222833A1 (en) * 2012-11-09 2014-08-07 Trusper, Inc. Trusted Social Networks
US20140136691A1 (en) * 2012-11-13 2014-05-15 Riverbed Technology, Inc. Application monitoring of related activities across multiple threads
US8874569B2 (en) 2012-11-29 2014-10-28 Lexisnexis, A Division Of Reed Elsevier Inc. Systems and methods for identifying and visualizing elements of query results
US9104787B2 (en) 2012-12-14 2015-08-11 Microsoft Technology Licensing, Llc Augmenting search results with relevant third-party application content
US20140188897A1 (en) 2013-01-02 2014-07-03 CrowdChunk LLC CrowdChunk System, Method and Computer Program Product for Searching Summaries of Mobile Apps Reviews
US9002821B2 (en) * 2013-01-16 2015-04-07 Google Inc. Indexing application pages of native applications
US20140245141A1 (en) 2013-02-26 2014-08-28 Microsoft Corporation Contextual user assistance for cloud services
US20140244464A1 (en) * 2013-02-27 2014-08-28 Capital One Financial Corporation System and method for providing a user-loadable stored value card
US20140304709A1 (en) * 2013-04-09 2014-10-09 National Instruments Corporation Hardware Assisted Method and System for Scheduling Time Critical Tasks
US20140359598A1 (en) 2013-05-29 2014-12-04 Microsoft Corporation Application installation from search results
US20140359519A1 (en) * 2013-05-31 2014-12-04 Microsoft Corporation Determination of Intended Navigation Destination Based on User-Generated and Analysis-Based Information
US9251224B2 (en) 2014-03-04 2016-02-02 Google Inc. Triggering and ranking of native applications
US9043333B1 (en) 2014-08-19 2015-05-26 Adlast, Inc. Systems and methods for directing access to products and services

Non-Patent Citations (21)

* Cited by examiner, † Cited by third party
Title
"Adding deep linking to Google+ posts shared from your iOS app," [online][Retrieved on Jan. 7, 2014]; Retrieved from the Internet URL: https://developers.google.com/+/mobile/ios/share/deep-link; 3 pages.
"App Linking," [online][Retrieved on Jan. 7, 2014]; Retrieved from the Internet URL: https://developers.facebook.com/docs/android/link-to-your-native-app/; 14 pages.
"Class Gecko View Content," [online][Retrieved on Jan. 2, 2014]; Retrieved from the Internet URL: people.mozilla.org/~mfinkle/geckoview/docs/org/Mozilla/gecko/GeckoViewContent.html; 4 pages.
"Class Gecko View Content," [online][Retrieved on Jan. 2, 2014]; Retrieved from the Internet URL: people.mozilla.org/˜mfinkle/geckoview/docs/org/Mozilla/gecko/GeckoViewContent.html; 4 pages.
"Deeplink.me Lets Mobile Users Navigate Through a "Web" of Apps," [online][Retrieved on Dec. 13, 2013]; Retrieved from the Internet URL: techcrunch.com/2013/05/22/new-service-called-deeplink-me-will-let-mobile-users-navigate-through-a-web-of-apps/; 8 pages.
"Frequently Asked Questions-General Information," [online][Retrieved on Jan. 7, 2014]; Retrieved from the Internet URL: https://linksmanager.com/Frequently+Asked+Questions+-+General+Information; 8 pages.
"Frequently Asked Questions-General Information," [online][Retrieved on Jan. 7, 2014]; Retrieved from the Internet URL: https://linksmanager.com/Frequently+Asked+Questions+−+General+Information; 8 pages.
"Google's Search Results Can Deep-Link to Your Android Apps," [online][Retrieved on Dec. 13, 2013]; Retrieved from the Internet URL: techcrunch.com/2013/10/31/android-4-4-kitkat-app-indexing/; 6 pages.
"How to determine when an application is fully launched?" [online][Retrieved on Jan. 2, 2014]; Retrieved from the Internet URL: social.msdn.microsoft.com/Forums/en-US/27e7353-eb4b-4e23-bf56-84f3efbbecba/how-to-determine-when-an-application-is-fully-launched; 5 pages.
"How to get a deep link of my application from the Windows Phone Marketplace using .NET code?" [online][Retrieved on Dec. 13, 2013]; Retrieved from stackoverflow.com/questions/13639564/how-to-get-a-deep-link-of-my-application-from-the-windows-phone-marketplace-usin; 2 pages.
"Indexing apps just like websites," [online][Retrieved on Dec. 13, 2013]; Retrieved from the Internet URL: googlewebmastercentral.blogspot.com/2013/10/indexing-apps-just-like-websites.html; 4 pages.
"Instant Pages on Google Chrome," [online][Retrieved on Dec. 16, 2013]; Retrieved from the Internet URL: chrome.blogspot.jp/2011/08/instant-pages-on-google-chrome.html; 3 pages.
"Mobile deep linking," [online][Retrieved on Dec. 13, 2013]; Retrieved from the Internet URL: en.wikipedia.org/wiki/Mobile-deep-linking; 2 pages.
"NSApplication Class Reference," [online][Retrieved on Jan. 2, 2014]; Retrieved from the Internet URL: https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/NSApplication-Class/Reference/Reference.html; 66 pages.
"Ready for a "Web" of Apps? Quixey Launches AppURL, A New Way to Enable Deep Linking Across Mobile Applications," [online][Retrieved on Dec. 13, 2013]; Retrieved from the Internet URL: techcrunch.com/2013/08/02/ready-for-a-web-of-apps-quixey-launches-appurl-a-new-way-to-enable-deep-linking-across-mobile-applications/; 8 pages.
"Seven Tips for Supercharging Your Links," [online][Retrieved on Jan. 7, 2014]; Retrieved from the Internet URL: goarticles.com/article/Seven-Tips-For-Supercharging-Your-Links/3056299/; 5 pages.
"Sharing to Google+ from your Android app," [online][Retrieved on Jan. 7, 2014]; Retrieved from the Internet URL: https://developers.google.com/+/mobile/android/share/#handling-incoming-deep-links; 2 pages.
Andrei Z. Broder et al., Efficient URL Caching for World Wide Web Crawling, May 20-24, 2003, [Retrieved on Jul. 27, 2016]. Retrieved from the internet: <URL: http://dl.acm.org/citation.cfm?id=775247> 11 Pages (679-689). *
Andrei Z. Broder et al., Efficient URL Caching for World Wide Web Crawling, May 20-24, 2003, [Retrieved on Jul. 27, 2016]. Retrieved from the internet: 11 Pages (679-689). *
Gautam Pant et al., Crawling the Web, 2004, [Retrieved on Jul. 27, 2016]. Retrieved from the internet: <URL: http://download.springer.com/static/pdf/63/chp%253A10.1007%252F978-3-662-10874-1-7.pdf> 25 Pages (153-177). *
Gautam Pant et al., Crawling the Web, 2004, [Retrieved on Jul. 27, 2016]. Retrieved from the internet: 25 Pages (153-177). *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190080685A1 (en) * 2017-09-08 2019-03-14 Amazon Technologies, Inc. Systems and methods for enhancing user experience by communicating transient errors
US11004444B2 (en) * 2017-09-08 2021-05-11 Amazon Technologies, Inc. Systems and methods for enhancing user experience by communicating transient errors
CN111625370A (en) * 2019-02-27 2020-09-04 杭州海康威视系统技术有限公司 Message pushing method and device, electronic equipment and storage medium
CN111625370B (en) * 2019-02-27 2023-10-10 杭州海康威视系统技术有限公司 Message pushing method and device, electronic equipment and storage medium
US20210312125A1 (en) * 2020-04-03 2021-10-07 Beijing Baidu Netcom Science And Technology Co., Ltd. Method, device, and storage medium for parsing document
CN112527413A (en) * 2020-12-23 2021-03-19 平安普惠企业管理有限公司 Page loading method, device, equipment and storage medium

Similar Documents

Publication Publication Date Title
US9652550B2 (en) Indexing application pages of native applications
EP3251013B1 (en) Monitoring application loading
US9547721B2 (en) Native application search results
JP6370408B2 (en) Deep links for native applications
US10068028B1 (en) Deep link verification for native applications
US9146972B2 (en) Ranking of presentation modes for particular content
US20230106266A1 (en) Indexing Access Limited Native Applications
US9513961B1 (en) Monitoring application loading
JP6410992B1 (en) Pre-instantiating native applications in the background
EP3238105A1 (en) Application partial deep link to a corresponding resource
US11003728B1 (en) Native application search results
US20160380992A1 (en) Authentication specific data
JP6683835B2 (en) Reduced waiting time when downloading electronic resources using multiple threads

Legal Events

Date Code Title Description
AS Assignment

Owner name: GOOGLE INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:HENDRIKS, ERIK;GUAJARDO-CESPEDES, MARIO;KNYCH, THOMAS WILLIAM;AND OTHERS;SIGNING DATES FROM 20140403 TO 20140408;REEL/FRAME:032807/0908

STCF Information on status: patent grant

Free format text: PATENTED CASE

AS Assignment

Owner name: GOOGLE LLC, CALIFORNIA

Free format text: CHANGE OF NAME;ASSIGNOR:GOOGLE INC.;REEL/FRAME:044097/0658

Effective date: 20170929

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Year of fee payment: 4