CN104769559A - 快速、动态高速缓存封装 - Google Patents

快速、动态高速缓存封装 Download PDF

Info

Publication number
CN104769559A
CN104769559A CN201380054854.1A CN201380054854A CN104769559A CN 104769559 A CN104769559 A CN 104769559A CN 201380054854 A CN201380054854 A CN 201380054854A CN 104769559 A CN104769559 A CN 104769559A
Authority
CN
China
Prior art keywords
data object
reception
width
piece
height
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.)
Granted
Application number
CN201380054854.1A
Other languages
English (en)
Other versions
CN104769559B (zh
Inventor
C·阿斯
R·L·莱温
R·居伊
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
Publication of CN104769559A publication Critical patent/CN104769559A/zh
Application granted granted Critical
Publication of CN104769559B publication Critical patent/CN104769559B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0873Mapping of cache memory to specific storage devices or parts thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

用于存储信息的方法可以包括确定所接收的数据对象是否适合在存储器位图中的多个空闲块中的特定一个空闲块内部。多个空闲块中的每一个可以包括具有顶边、底边和预定宽度的存储器位图的列。如果所接收的数据对象适合,则所接收的数据对象可以在多个空闲块中的特定一个空闲块的顶边开始存储在多个空闲块中的特定一个空闲块中。可以通过移动顶边对多个数据块中的特定一个数据块调整尺寸以在所存储的接收到的数据对象之下开始。该确定可以包括对于多个空闲块中的每一个,所接收的数据对象的高度可以与空闲数据块中的每一个的高度比较。

Description

快速、动态高速缓存封装
相关申请的交叉引用/通过引用并入
本申请参考下面两个申请并且要求其优先权:2012年9月20日提交的、标题为“Fast,Dynamic Cache Packing”的美国临时申请序列号NO.61/703,483和2012年9月26日提交的、现在作为美国专利NO.8,510,531发布的标题为“Fast,Dynamic Cache Packing”的美国专利申请序列号NO.13/627,320,这两个申请通过引用将其条款在本文中被全部并入。
技术领域
本申请的方面通常涉及数据存储和存储器管理的领域。更具体地,本公开的某些实现涉及快速、动态、高速缓存封装。
背景技术
文本、或任何其它图形结构常常被绘制成位图或纹理,并且接着按需要从位图或纹理拷贝到绘制目的地中。所述高速缓存机制通常在很多不同的应用中被普遍地用于各种数据对象,包括图标、图像和被称为图示符的文本字符。
然而,用于这样的数据对象的常规高速缓存技术是低效的,因为对象被连续地存储并且没有对单独对象尺寸的任何考虑。这样的低效高速缓存导致使用更多的存储器来存储更多的位图以保存所有必要的绘制对象,以及使用更多的CPU资源和存储器带宽来拷贝存在的较大的位图。例如,在图形处理单元(GPU)上使用的位图需要被上传到GPU作为纹理。因此,纹理越大,上传花费的时间就越长并且随后用于拷贝位图的系统资源就越多。
常规高速缓存技术的附加的缺点是,每位图所存储的较少的绘制对象导致高速缓存快速填补,这常常需要使对高速缓存的频繁刷新加倍来为不能适合的其它绘制对象让出位置。这样的频繁刷新减少了片上存储器的效用,因为系统本质上是每当对象被需要时从零开始绘制对象的,而不能够简单地拷贝对象的高速缓存版本。
通过比较这样的方法与在本公开的其余部分中参考附图阐述的当前方法和装置的一些方面,常规和传统方法的另外的限制和缺点将对本领域中的技术人员变为显而易见的。
发明内容
提供了实质上如在至少一个附图中示出的和/或结合至少一个附图描述的用于快速、动态、高速缓存封装的系统和/或方法,如在权利要求中更完全地阐述的。
本公开的这些和其它优点、方面和特征以及其所示出的实现的细节将从下面的描述和附图中被更充分理解。
根据本公开的示例实施例,用于存储信息的方法可以包括确定所接收的数据对象是否适合在存储器位图中的多个空闲块中的特定一个空闲块内部。多个空闲块中的每一个可以包括具有顶边、底边和预定宽度的存储器位图的列。如果所接收的数据对象适合,则所接收的数据对象可以被存储在多个空闲块中的特定一个空闲块中,在多个空闲块中的特定一个空闲块的顶边开始。可以通过移动顶边以在所存储的接收到的数据对象之下开始来对多个数据块中的特定一个数据块调整尺寸。所述确定可以包括对于多个空闲块中的每一个,所接收的数据对象的高度可以与多个空闲数据块中的每一个的高度比较。所接收的数据对象的宽度可以与多个空闲数据块中的每一个的预定宽度比较。
当所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度更小时并且当所接收的数据对象的宽度比多个空闲数据块中的特定一个空闲数据块的预定的宽度小不超过预定阈值量的差异时,可以确定所接收的数据对象适合在多个空闲块中的特定一个空闲块内部。如果所接收的数据对象不适合在多个空闲块中的特定一个空闲块内部,并且所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,则可以通过划分多个空闲块中的特定一个空闲块来创建新空闲块,其中新空闲块至少与所接收的数据对象一样宽。
所接收的数据对象可以在新空闲块的顶边开始被存储在新空闲块中。可以维护多个空闲块的列表。如果多个空闲块中的至少一个的尺寸落在预定阈值尺寸之下,则可以从列表中丢弃所述多个空闲块中的至少一个。
根据本公开的另一示例实施例,用于存储信息的设备可以包括包含程序的控制电路,所述程序指示设备执行确定所接收的数据对象是否适合在存储器位图中的多个空闲块中的特定一个空闲块内部。多个空闲块中的每一个可以包括具有顶边、底边和预定宽度的存储器位图的列。如果所接收的数据对象适合,则所接收的数据对象可以在多个空闲块中的特定一个空闲块的顶边开始被存储在多个空闲块中的特定一个空闲块中。可以通过移动顶边以在所存储的接收到的数据对象之下开始由控制电路来对多个数据块中的特定一个数据块调整尺寸。
对于多个空闲块中的每一个,控制电路可以比较所接收的数据对象的高度与多个空闲数据块中的每一个的高度。控制电路还可以比较所接收的数据对象的宽度与多个空闲数据块中的每一个的预定宽度。控制电路可以包含程序,所述程序可以指示设备如果所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,并且如果所接收的数据对象的宽度比多个空闲数据块中的特定一个空闲数据块的预定宽度小不超过预定阈值量的差异,则确定所接收的数据对象适合在多个空闲块中的特定一个空闲块内部。
如果所接收的数据对象不适合在多个空闲块中的特定一个空闲块内部,并且所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,则控制电路可以包含程序,所述程序可以指示设备通过划分多个空闲块中的特定一个空闲块来创建新空闲块,其中新空闲块至少与所接收的数据对象一样宽。控制电路可以包含程序,所述程序可以指示设备在新空闲块的顶边开始将所接收的数据对象存储在新空闲块中。
控制电路可以包含程序,所述程序可以指示设备维持多个空闲块的列表。控制电路可以包含程序,所述程序可以指示设备如果多个空闲块中的至少一个空闲块的尺寸落在预定的阈值尺寸之下,则从列表中丢弃所述多个空闲块中的至少一个空闲块。
根据本公开的又一示例实施例,公开了非暂时性、机器可读存储介质,其上存储有具有用于存储信息的至少一个代码段的计算机程序。所述至少一个代码段可以由机器执行,用于使机器执行包括确定所接收的数据对象是否适合在存储器位图中的多个空闲块中的特定一个空闲块内部的方法。多个空闲块中的每一个可以包括具有顶边、底边和预定宽度的存储器位图的列。如果所接收的数据对象适合,则所接收的数据对象可以在多个空闲块中的特定一个空闲块的顶边开始存储在多个空闲块中的特定一个空闲块中。可以通过移动顶边以在所存储的接收到的数据对象之下开始来对多个数据块中的特定一个数据块调整尺寸。
所述确定可以包括用于执行一种方法的代码,所述方法包括对于多个空闲块中的每一个,比较所接收的数据对象的高度与多个空闲数据块中的每一个的高度,以及比较所接收的数据对象的宽度与多个空闲数据块中的每一个的预定宽度。至少一个代码段可以包括用于如果所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,则确定所接收的数据对象适合在多个空闲块中的特定一个空闲块内部的代码。也可以此外,如果所接收的数据对象的宽度比多个空闲数据块中的特定一个数据空闲块的预定宽度小不超过预定阈值量的差异,则确定所接收的数据对象适合在多个空闲块中的特定一个空闲块内部。
如果所接收的数据对象不适合在多个空闲块中的特定一个空闲块内部,并且所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,则至少一个代码段可以包括用于通过划分多个空闲块中的特定一个空闲块来创建新空闲块的代码,其中新空闲块至少与所接收的数据对象一样宽。至少一个代码段可以包括用于在新空闲块的顶边开始将所接收的数据对象存储在新空闲块中的代码。所述至少一个代码段可以包括用于维护多个空闲块的列表,以及如果多个空闲块中的至少一个的尺寸落在预定阈值尺寸之下,则从列表中丢弃多个空闲块中的至少一个的代码。
附图说明
图1是根据本公开的示例实施例的示出了空位图的框图。
图2-图4是根据本公开的示例实施例的示出了对具有图示符的图1的位图进行封装的框图。
图5是根据本公开的示例实施例的示出了用于存储信息的方法的示例步骤的流程图。
图6是根据本公开的示例实施例的示出了用于存储信息的方法的示例步骤的流程图。
图7是根据本公开的示例实施例的可以用于存储信息的示例设备的框图。
具体实施方式
如在本文中利用的,术语“电路”和“电路系统”指物理电子部件(即,硬件)和可以配置硬件、由硬件执行、和/或否则与硬件相关联的任何软件和/或固件(“代码”)。如在本文利用的,“和/或”意指由“和/或”连接的列表的项目中的任一个或多个。作为示例,“x和/或y”意指三要素集合{(x),(y),(x,y)}的任一要素。作为另一示例,“x,y和/或z”意指七要素集合{(x),(y),(z),(x,y),(x,z),(y,z),(x,y,z)}的任一要素。如在本文利用的,术语“例如”引入了一个或多个非限制性示例、实例或例证的列表。如在本文利用的,术语“位图”可以指位图或纹理(纹理本质上是例如在图形处理单元(GPU)渲染中使用的位图;例如在GPU绘图中使用的位图)。
通常,图示符或其它小图像(例如,图标)可以以一种方式被存储,所述方式使得每位图中可以存在很多图示符或其它小图像。例如,如果字母表的字符按顺序被绘制,则它们可以按下面的顺序被存储在位图中:
“abcdefghijklmnopqrstuvwxyz”。
然而,这样的存储器(高速缓存)利用对于存储这些字母表字符(或图示符)可能不是非常有效的。例如,“I”高于“a”,并且它将占据一行字符中的更多垂直空间,导致在“a”周围“a”具有空像素。这个缺点在不同尺寸(例如,大和小字体)的文本被绘制时可能变得甚至更明显,引起在高速缓存中的字符的尺寸之间的较大差异,和可能在较小字符周围的更空和浪费的空间。在高速缓存中的未使用的像素越多,缓存必要的对象所消费的存储器就越多,并且用于处理所述增加的负荷的系统资源就越多。
本公开涉及快速、动态、高速缓存封装,其可以用于使高速缓存容量最大化并且为任何给定的位图存储尽可能多的字符(或任意尺寸的任意数据对象),同时减小每位图所浪费的空间的量。
根据本公开的示例实施例,可以在任何任意位图或位图的集合中使用“空闲块”的概念。“空闲块”可以表示具有特定宽度(或高度)的位图的列(或行),其可以用于存储数据对象(例如,图示符或其它字符)。给定的位图(或高速缓存)可以具有多个可用的空闲块。对于任何位图,可以维持在位图内的空闲块的链接列表,该列表可以被扫描以基于对象的尺寸以及每一个空闲块的尺寸来找到用于存储给定的绘制对象的最佳地点。如在本文中使用的术语“剩余空间”指在给定位图的空闲块的列表中的最后一个空闲块。剩余空间表示在位图中可用于分配到新空闲块的空间的其余部分。事实上,剩余空间是空闲块(“最后一个”空闲块),其可以用于从它划出其它(新)空闲块(只要剩余空间的宽度大于可能被需要的新空闲块的宽度)。可以通过根据到来的绘制对象的尺寸要求细分位图中的剩余空间来创建新空闲块。空闲块可以关闭,因为它们填充以使扫描需要被存储的每个新绘制对象的空闲块的列表所花费的时间最小化。每一个新空闲块可以是创建位图的宽度的位图中的列。
如果对象在该空闲块内适合并且对象宽度被认为“足够接近”该空闲块的宽度,则绘制对象可以被存储在特定的空闲块中。“足够接近”要求的原因是产生列,其生成足够灵活的高速缓存以适合接近列的宽度的所有对象,但不一定确切地适合它。例如,如果对象具有40个像素的宽度,则它将适合到具有40个像素的宽度的空闲块内。然而,“足够接近”概念(或阈值)可以用于将使具有39个像素的宽度的对象适合相同的40像素宽的列。在这个方面中,高速缓存可以利用在所接收的数据对象可以例如仅仅一个或两个像素不同时被充分利用的列而被有效地封装,而不是产生恰好稍微更大或更小的项目的新列(例如,拉丁字母表图示符可以具有任意高度,但可以在宽度上相差多达几个像素)。
根据本公开的示例实施例,用于存储信息的方法可以包括确定所接收的数据对象是否适合存储器位图中的多个空闲块中的特定一个空闲块内部。多个空闲块中的每一个可以包括具有顶边、底边和预定宽度的存储器位图的列。如果所接收的数据对象适合,则所接收的数据对象可以在多个空闲块中的特定一个空闲块的顶边开始存储在多个空闲块中的特定一个空闲块中。可以通过移动顶边以在所存储的接收到的数据对象之下开始来调整多个数据块中的特定一个数据块的尺寸。该确定可以包括对于多个空闲块中的每一个,所接收的数据对象的高度可以与多个空闲数据块中的每一个的高度比较。所接收的数据对象的宽度可以与多个空闲数据块中的每一个的预定宽度比较。
图1是根据本公开的示例实施例的示出了空位图的框图。参考图1,示出了空位图100。示例位图100可以具有400像素(宽度)乘200像素(高度)的尺寸。位图的左上角的坐标可以被表示为(0,0),而右下角的坐标可以被表示为(400,200)。
位图100可以用于存储任意尺寸的数据对象,例如,字母表字符(或图示符),其可以被接收并动态地存储在位图100中。此外,空闲块(例如,具有特定宽度的位图的列)的列表101可以被维护(例如,存储在另一存储器位置中)。空闲块列表101可以被表示为“FREE”。因为图1中的整个位图100是空的,空闲块列表只包含单个块(即,整个位图的尺寸)。换句话说,在位图100中的空闲空间可以被表示为FREE={{0,0,400,200}},其列出空闲块的左上角和右下角的坐标。根据本公开的示例实施例,在列表101中的空闲块可以按照尺寸布置,以最小的开始并以最大的结束。剩余空间可以被放置在列表101中最后,在最大的空闲块之后。当新空闲块被创建时,如果必要,该列表可以用新空闲块来更新并且被重新布置。
图2-图4是根据本公开的示例实施例的示出了利用图示符封装图1的位图的框图。参考图2,位图100的封装可以通过接收第一图示符“a”并将第一图示符“a”添加到位图开始。图示符“a”可以具有宽度g1w个像素和高度g1h个像素。最初,可以确定图示符“a”是否适合在位图100的空闲空间中(即,单个空闲空间是整个位图100的尺寸)。更具体地,可以确定g1w是否小于400个像素,以及g1h是否小于200个像素。
因为唯一的空闲块是整个位图100,所以新列(或空闲块)FB1可以被创建并且可以被确定尺寸为图示符“a”的宽度加上阈值T和位图100的高度。最新创建的FB1可以被添加在空闲块列表101中。可以将位图100的剩余空间(RS)尺寸调整为空闲块FB1的最新创建的列的右边(RS的空间坐标是{32,0,400,200})。图示符“a”可以存储在FB1的顶部处,占据具有坐标{0,0,32,32}的示例空间。可以接着对空闲块FB1调整尺寸,所以它的顶边在图示符“a”之下(调整尺寸的FB1将具有坐标{0,32,32,200})。在FB1被调整尺寸之后,空闲块列表101可以用FB1的当前空闲空间坐标和剩余空间(RS)来更新,使得FREE={{0,32,32,200},{32,0,400,200}}。
参考图3,图示符“w”(具有g2w的宽度和g2h的高度)可以被添加到位图100。因为图示符“w”比“a”图示符和FB1宽,所述添加它导致新空闲块FB2的创建和剩余空间RS的尺寸调整。
更具体地,图示符“w”的宽度g2w可以比g1w和W1宽。可以利用宽度W2创建新的空闲块FB2,并且可以将FB2的坐标插入在空闲块列表101中。可以将剩余空间RS的尺寸调整为FB2的右边(RS的空间坐标是{68,0,400,200})。图示符“w”可以存储在FB2的顶部处,占据具有坐标{32,0,68,68}的示例空间。可以接着对空闲块FB2调整尺寸,所以它的顶边在图示符“w”之下(调整尺寸的FB2将具有坐标{32,28,68,200}。在对FB2调整尺寸之后,空闲块列表101可以用FB2的当前空闲块坐标和剩余空间(RS)来更新,使得FREE={{0,32,32,200},{32,28,68,200},{68,0,400,200}}。
参考图4,图示符“b”(具有g3w的宽度和g3h的高度)可以被添加到位图100。因为图示符“b”足够接近FB1的宽度W1,所以图示符“b”被添加到FB1,并且接着FB1相应地被调整尺寸。
更具体地,图示符“b”的宽度g3w可以小于W1。可以接着将图示符“b”存储在FB1中的图示符“a”之下,并且可以对FB1调整尺寸,所以它的顶边在图示符“b”之下(调整尺寸的FB1将具有坐标{0,65,32,200})。在对FB1调整尺寸之后,空闲块列表101可以用FB1的当前空闲空间坐标来更新,使得FREE={{0,65,32,200},{32,28,68,200},{68,0,400,200}}。
如在图2-图4中看到的,可以对空闲块FB1的宽度W1的尺寸调整为稍微大于图示符“a”的宽度g1w(并且FB2的宽度W2的尺寸被调整为稍微大于图示符“w”的宽度g2w)。更具体地,可以使W1的尺寸调整为T个像素的倍数并且稍微更大(例如,T个像素的最大变化阈值)。在图2-图4的特定示例中,T=4个像素。可以使FB1的尺寸调整为具有W1=32个像素(4的倍数)的宽度,使得具有29、30、31或32个像素的宽度的图示符(或其它数据对象)可以存储在FB1中(即,具有在宽度W1之下并包括宽度W1的最大4像素宽度变化的图示符)。类似地,可以使FB2的尺寸调整为具有W2=36个像素(也是4的倍数)的宽度,使得具有33、34、35或36个像素的宽度的图示符(或其它数据对象)可以存储在FB2中(即,具有在宽度W2之下并包括宽度W2的最大4像素宽度变化的图示符)。在这个方面中,位图100可以利用在所接收的数据对象可以改变例如仅仅一个或两个像素时被充分利用的列而被有效地封装,而不是产生恰好稍微更大或更小的项目的新列。
即使在图2-图4中示出的是特定的实现(其中T=4,列宽度是4个像素的倍数,并且最大变化阈值是4个像素),本公开也可以不被限制在这个方面中,并且其它实现可以使用T的不同值。在数据对象具有统一的宽度的实例中,可以不使用列宽度的变化阈值,并且可以选择具有与数据对象的宽度确切地匹配的宽度的空闲块。
此外,即使图2-图4示出了空闲块是位图列的高速缓存封装,但是本公开可以不被限制在这个方面中。更具体地,可以代替列来使用位图行。在这个实例中,可以基于所接收的对象的高度(而不是宽度)的变化来创建新行,并且剩余空间将移动到位图的底部(而不是如图2-图4所示的位图的右侧)。
图5是根据本公开的示例实施例的示出了用于存储信息的方法的示例步骤的流程图。参考图2-图5,示例方法500可以在502开始,绘制对象D(具有高度HD)可以在位图B中被接收到。在504,处理循环可以开始,使得步骤506-528对于位图中的所有空闲块(包括剩余空间)可以重复。在504,最初FB可以是空闲块列表中的第一空闲块FB1。
在506,可以确定绘制对象D的高度和宽度是否小于空闲块FB的高度和宽度。如果它们不小于,则处理可以在528继续,此时可以确定空闲块是否是剩余空间(即,在高速缓存中的最后一个空闲块)。如果是,则处理结束。如果否,则处理在530重新开始,此时下一空闲块被占用(FB递增1,FB=FB+1)。
如果绘制对象D的高度和宽度小于空闲块FB的高度和宽度,则在508可以确定FB是否是剩余空间。如果FB是剩余空间,则在514可以在剩余空间中创建新的空闲块。在516,最新创建的FB可以插入在FB列表(例如,101)中。在518,可以使剩余空间RS的尺寸调整为新FB的最新创建的列的右边。在520,绘制对象D可以被存储在新FB的顶部处。在522,可以使新FB的尺寸调整为在D之下开始。
如果FB不是剩余空间,则在509可以确定D的宽度是否比FB的宽度小不大于最大阈值。如果否,则处理可以在块530重新开始(使FB递增并且处理FB列表中的下一FB)。如果是,则在510,D可以被存储在FB的顶部处。在512,可以使FB的尺寸调整为在D之下开始。
在524,可以确定FB的高度是否小于高度阈值。如果否,则处理可以在块528重新开始。如果是,则在526,可以从FB列表移除FB。
参考图2和图5,当第一图示符“a”被接收到时,FB将是整个位图(即,FB是剩余空间)。在这个实例中,步骤506将返回“是”,并且步骤508将返回“是”。处理可以接着通过514-522继续,创建具有坐标{0,32,32,200}的FB1,并且将RS的尺寸调整为{32,0,400,200}。块524将返回“否”,块528将返回“是”,并且处理结束。
参考图3和图5,当第二图示符“w”被接收到时,FB列表101包括FB1和RS(剩余空间)。处理循环首先以FB=FB1开始。在这个实例中,506将返回“否”,528将返回“否”,并且在530,FB可以递增一(即,FB是剩余空间)。
块506现在将返回“是”,并且508将返回“是”。处理可以接着通过514-522继续,创建具有坐标{32,28,68,200}的FB2,并且将RS的尺寸调整为{68,0,400,200}。块524将返回“否”,块528将返回“是”,并且处理结束。
参考图4和图5,当第三图示符“b”被接收到时,FB列表101包括FB1、FB2和RS(剩余空间)。处理循环首先以FB=FB1开始。在这个实例中,506将返回“是”,并且528将返回“否”。步骤509将返回“是”,因为图示符“b”的宽度稍微小于FB1的宽度W1。处理可以接着通过510-512继续,将“b”存储在FB1中并且利用新坐标{0,65,32,200}来对FB1调整尺寸。块524将返回“否”,块528将返回“是”,并且处理结束。
图6是根据本公开的示例实施例的示出了用于存储信息的方法的示例步骤的流程图。参考图2-图4和图6,示例方法600可以在602开始,此时对于在存储器位图(例如,101)中的多个空闲块(例如,FB1、FB2和RS)中的每一个,可以确定所接收的数据对象是否适合多个空闲块中的特定一个空闲块内部(例如,如上面所解释的当图示符“a”、“w”和“b”被接收到时)。
如果它适合,则在606,所接收的数据对象可以在多个空闲块中的特定一个空闲块的顶边开始存储在多个空闲块(例如,FB1、FB2和RS)中的特定一个空闲块中。在608,可以通过移动顶边以在所存储的接收到的数据对象之下开始来对多个数据块中的特定一个数据块调整尺寸(如关于使FB1和FB2的尺寸改变上面所解释的)。
如果所接收的数据对象不适合,则在604,数据对象可以被保存在另一位图中(或可选地,可以从当前位图中删除数据,并且可以使用最新释放的空间用于存储)。
图7是根据本公开的示例实施例的可以用于存储信息的示例设备的框图。参考图7,移动设备700可以包括可操作用于实现位图封装的各种方面的适当逻辑、电路、接口和/或代码,如上面和参考图1-图6所描述的。移动设备700可以包括例如主处理器(CPU)702、系统存储器704、通信子系统706、感官和输入/输出(I/O)子系统708、输入/输出(I/O)子系统710、以及显示器720。
主处理器702可以包括可操作用于处理数据和/或控制和/或管理移动设备700的操作和/或结合管理在存储器704中的一个或多个位图(或高速缓存)中的数据存储在其中执行的任务和/或应用的适当逻辑、电路、接口和/或代码。在这个方面中,主处理器302可操作用于通过利用例如一个或多个控制信号来配置和/或控制移动设备700的各种部件和/或子系统的操作。主处理器702使可以例如存储在系统存储器704中的应用、程序和/或代码能够运行和/或执行。可选地,一个或多个专用应用处理器可以被利用用于在移动设备700中运行和/或执行应用(或程序)。
在一些实例中,在移动设备700上运行和/或执行的一个或多个应用可以产生和/或更新可以经由显示器720表现的视频内容。在其它实例中,在移动设备700上运行和/或执行的一个或多个应用可以用于执行参考存储数据对象和组织(或封装)存储器704在本文中解释的功能。
系统存储器704可以包括可以使可以被使用、消费和/或处理的数据、代码和/或其它信息的能够被永久和/或非永久存储、缓冲和/或取回的适当逻辑、电路、接口和/或代码。在这个方面中,系统存储器704可以包括不同的存储器技术,不同的存储器技术包括例如只读存储器(ROM)、随机存取存储器(RAM)、闪存、固态驱动器(SSD)、和/或现场可编程门阵列(FPGA)。系统存储器704可以存储例如可以包括参数和/或代码的配置数据,包括软件和/或固件。
通信子系统706可以包括可操作用于例如经由一个或多个有线和/或无线连接从和/或向移动设备传递数据的适当的逻辑、电路、接口、和/或代码。通信子系统706可以被配置为支持一个或多个有线协议(例如,以太网标准、MOCA等)和/或无线协议或接口(例如,蓝牙、WiFi、蜂窝、WiMAX和/或任何其它可用的无线协议/接口),根据可适用的有线或无线协议而便于向移动设备700传输信号和/或从移动设备700接收信号、和/或处理所发送或接收的信号。在这个方面中,信号处理操作可以包括滤波、放大、模数转换和/或数模转换、基带信号的上变频/下变频、编码/解码、加密/解密、和/或调制/解调制。根据本公开的实施例,通信子系统706可以将有线和/或无线连接提供给外部设备和网络。
感官子系统708可以包括用于得到和/或产生可以与移动设备700、其用户、和/或其环境有关的感官信息的适当逻辑、电路、接口、和/或代码。例如,感官和/或I/O子系统708可以包括定位或位置传感器(例如,基于GPS或其它GNSS的传感器)、环境条件(例如,温度、湿度、或光)传感器、和/或运动相关的传感器(例如,加速计、陀螺仪、步数器、和/或高度计)。
I/O子系统710可以包括用于使用户能够与移动设备700进行交互、能够从用户得到输入和/或向用户提供输出的适当逻辑、电路、接口和/或代码。I/O子系统710可以支持各种类型的输入和/或输出,包括例如视频、音频和/或文本。在这个方面中,在移动设备700外部或集成在移动设备700内的专用I/O设备和/或部件可以用于在I/O子系统710的操作期间输入和/或输出数据。示例性I/O设备可以包括显示器、鼠标、键盘、触摸屏、语音输入接口、和其它输入/输出接口或设备。关于视频输出,I/O子系统710可操作用于生成和/或处理视频内容、图形、和/或文本数据、和/或基于其生成视频帧用于例如经由显示器720来显示。
显示器720可以包括可以使可以经由I/O子系统710来操纵和/或处理的视频内容能够显示的适当逻辑、电路、接口和/或代码。显示器720可以在可以包括联系人列表的输出视频数据中使用。
根据本公开的示例实施例,用于存储信息的设备(例如,移动设备700)可以包括包含程序的控制电路(例如,CPU 702),所述程序指示设备700执行确定所接收的数据对象是否适合存储器704中的存储器位图中的多个空闲块中的特定一个空闲块内部。多个空闲块中的每一个可以包括具有顶边、底边、以及预定宽度的存储器位图的列。如果所接收的数据对象适合,则所接收的数据对象可以在多个空闲块中的特定一个空闲块的顶边开始存储在多个空闲块中的特定一个空闲块中。可以通过移动顶边以在所存储的接收到的数据对象之下开始由控制电路702对多个数据块中的特定一个数据块调整尺寸。
对于多个空闲块中的每一个,控制电路702可以比较所接收的数据对象的高度与多个空闲数据块中的每一个的高度。控制电路702还可以比较所接收的数据对象的宽度与多个空闲数据块中的每一个的预定宽度。控制电路702可以包含程序,所述程序指示设备700如果所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,并且如果所接收的数据对象的宽度比多个空闲数据块中的特定一个空闲数据块的预定宽度小不超过预定阈值量的差异,则确定所接收的数据对象适合在多个空闲块中的特定一个空闲块内部。
控制电路702可以包含程序,所述程序可以指示设备如果所接收的数据对象不适合在多个空闲块中的特定一个空闲块内部并且所接收的数据对象的高度比多个空闲数据块中的特定一个空闲数据块的高度小,则通过划分多个空闲块中的特定一个空闲块来创建新空闲块。新空闲块的宽度可以超过多个空闲数据块中的特定一个空闲数据块的宽度预定的阈值量。控制电路702可以包含程序,所述程序可以指示设备700在新空闲块的顶边开始将所接收的数据对象存储在新空闲块中。
控制电路702可以包含程序,所述程序可以指示设备700维持存储器704中的多个空闲块的列表。控制电路702可以包含程序,所述程序可以指示设备700如果多个空闲块中的至少一个空闲块的尺寸落在预定阈值尺寸之下,则从列表中丢弃多个空闲块中的至少一个。
其它实现可以提供非暂时性计算机可读介质和/或存储介质、和/或非暂时性机器可读介质和/或存储介质,其上存储有机器代码和/或计算机程序,所述机器代码和/或计算机程序具有由机器和/或计算机可执行的至少一个代码段,从而使机器和/或计算机执行如本文所述的用于存储信息的步骤。
相应地,可以在硬件、软件、或硬件和软件的组合中实现当前的方法和/或系统。当前的方法和/或系统可以用集中式方式在至少一个计算机系统中实现或以不同的元件散布在几个互连的计算机系统当中的分布式方式实现。适合于实现本文所述的方法的任何类型的计算机系统或其它系统是适当的。硬件和软件的一般组合可以是具有计算机程序的通用计算机系统,当计算机程序被装入和执行时控制计算机系统,使得它实现本文描述的方法。
当前的方法和/或系统也可以被嵌入在计算机程序产品中,计算机程序产品包括使本文所述的方法能够实现的所有特征,并且所述计算机程序产品在被装入计算机系统中时能够实现这些方法。在当前的上下文中的计算机程序意指以任何语言、代码或记号、任何表达方式的一组指令,所述指令是要使具有信息处理能力的系统直接地或在下面的两个操作中的一个或两个之后执行特定的功能:a)转换到其它语言、代码或记号;b)以不同的材料形式再现。
虽然参考某些实现描述了当前的方法和/或装置,但是本领域中的技术人员将理解,可以在不偏离当前的方法和/或装置的范围的情况下,做出各种变化并且可以替换等效形式。此外,可以做出很多修改以使特定的情况或材料适合于本公开的教导而不偏离其范围。因此,意图是当前的方法和/或装置不限于所公开的特定实现,而当前的方法和/或装置将包括落在所附的权利要求的范围内的所有实现。

Claims (20)

1.一种用于存储信息的方法,所述方法包括:
响应于接收的数据对象适合在存储器位图的第一块中,将所述接收的数据对象存储在所述第一块的边缘处,其中,所述接收的数据对象基于所述接收的数据对象的宽度小于或等于所述第一块的宽度以及所述接收的数据对象的高度小于或等于第一数据块的高度而适合;以及
响应于存储所述接收的数据对象,通过基于所述接收的数据对象的所述高度或所述接收的数据对象的所述宽度调节所述第一块的所述边缘来对所述第一块调整尺寸。
2.如权利要求1所述的方法,其中,所述接收的数据对象基于所述接收的数据对象的宽度在所述第一块的所述宽度的阈值距离内而适合。
3.如权利要求1所述的方法,其中,所述接收的数据对象基于所述接收的数据对象的高度在所述第一块的所述高度的阈值距离内而适合。
4.如权利要求1所述的方法,还包括响应于接收的数据块不适合在所述第一块中:
迭代地比较所述接收的数据对象与在所述存储器位图的多个块中的相应块以确定所述接收的数据对象是否适合在所述相应块内;
响应于所述接收的数据对象适合在给定的相应块中,将所述接收的数据对象存储在所述存储器位图的所述给定的相应块的边缘处,其中,所述接收的数据对象基于所述接收的数据对象的所述宽度小于或等于所述给定的相应块的宽度以及所述接收的数据对象的所述高度小于或等于给定的相应数据块的高度而适合;以及
响应于存储所述接收的数据对象,通过基于所述接收的数据对象的所述高度或所述接收的数据对象的所述宽度调节所述给定的相应块的所述边缘来对所述给定的相应块调整尺寸。
5.如权利要求1所述的方法,还包括基于所述接收的数据对象的所述宽度来限定所述第一块的宽度。
6.如权利要求1所述的方法,还包括基于所述接收的数据对象的所述高度来限定所述第一块的高度。
7.如权利要求1所述的方法,其中,所述存储器位图的所述第一块是垂直列。
8.如权利要求1所述的方法,其中,所述存储器位图的所述第一块是水平行。
9.一种非暂时性的机器可读存储介质,具有存储于其上的计算机程序,所述计算机程序具有用于存储信息的至少一个代码段,所述至少一个代码段能够由机器执行,用于使所述机器执行一种方法,所述方法包括:
响应于接收的数据对象适合在存储器位图的第一块中而将所述接收的数据对象存储在所述第一块的边缘处,其中,所述接收的数据对象基于所述接收的数据对象的宽度小于或等于所述第一块的宽度以及所述接收的数据对象的高度小于或等于所述第一块的高度而适合;以及
响应于存储所述接收的数据对象,通过基于所述接收的数据对象的所述高度或所述接收的数据对象的所述宽度调节所述第一块的所述边缘来对所述第一块调整尺寸。
10.如权利要求9所述的机器可读存储介质,其中,所述接收的数据对象基于所述接收的数据对象的宽度在所述第一块的所述宽度的阈值距离内而适合。
11.如权利要求9所述的机器可读存储介质,其中,所述接收的数据对象基于所述接收的数据对象的高度在所述第一块的所述高度的阈值距离内而适合。
12.如权利要求9所述的机器可读存储介质,还包括响应于接收的数据块不适合在所述第一块中:
迭代地比较所述接收的数据对象与在所述存储器位图的多个块中的相应块,以确定所述接收的数据对象是否适合在所述相应块内;
响应于所述接收的数据对象适合在给定的相应块中,将所述接收的数据对象存储在所述存储器位图的所述给定的相应块的边缘处,其中,所述接收的数据对象基于所述接收的数据对象的所述宽度小于或等于所述给定的相应块的宽度以及所述接收的数据对象的所述高度小于或等于给定的相应数据块的高度而适合;以及
响应于存储所述接收的数据对象,通过基于所述接收的数据对象的所述高度或所述接收的数据对象的所述宽度调节所述给定的相应块的所述边缘来对所述给定的相应块调整尺寸。
13.如权利要求9所述的机器可读存储介质,还包括基于所述接收的数据对象的所述宽度来限定所述第一块的宽度。
14.如权利要求9所述的机器可读存储介质,还包括基于所述接收的数据对象的所述高度来限定所述第一块的高度。
15.如权利要求9所述的机器可读存储介质,其中,所述存储器位图的所述第一块是垂直列。
16.如权利要求9所述的机器可读存储介质,其中,所述存储器位图的所述第一块是水平行。
17.一种用于存储信息的方法,所述方法包括:
通过将接收的数据对象存储在存储器位图中来限定所述存储器位图中的第一块,其中,所述第一块具有基于接收的数据对象的尺寸的大小,并且其中,所述存储器位图的剩余部分包括空闲块;
迭代地比较随后接收的数据对象与在所述存储器位图的多个块中的相应块;
响应于所述随后接收的数据对象适合在给定的相应块中,将所述随后接收的数据对象存储在所述存储器位图的所述给定的相应块的边缘处,其中,所述随后接收的数据对象基于所述随后接收的数据对象的宽度小于或等于所述给定的相应块的宽度以及所述随后接收的数据对象的高度小于或等于给定的相应数据块的高度而适合;以及
响应于存储所述随后接收的数据对象,通过基于所述随后接收的数据对象的所述高度或所述随后接收的数据对象的所述宽度调节所述给定的相应块的所述边缘来对所述给定的相应块调整尺寸。
响应于所述随后接收的数据对象不适合在所述给定的相应块中,通过将所述随后接收的数据对象存储在存储器位图中来限定所述存储器位图中的随后块,其中,所述随后块具有基于所述随后接收的数据对象的尺寸的大小,并且其中,所述存储器位图的所述剩余部分包括所述空闲块。
18.如权利要求17所述的方法,还包括基于所述接收的数据对象的宽度来限定所述第一块的尺寸,并且其中,所述存储器位图的所述第一块是垂直列。
19.如权利要求17所述的方法,还包括基于所述接收的数据对象的高度来限定所述第一块的尺寸,并且其中,所述存储器位图的所述第一块是水平行。
20.如权利要求17所述的方法,其中,所述随后接收的数据对象基于所述接收的数据对象的宽度在所述相应块的所述宽度的阈值距离内并且基于所述接收的数据对象的高度在所述相应块的所述高度的阈值距离内而适合。
CN201380054854.1A 2012-09-20 2013-09-17 快速、动态高速缓存封装 Active CN104769559B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201261703483P 2012-09-20 2012-09-20
US61/703,483 2012-09-20
US13/627,320 US8510531B1 (en) 2012-09-20 2012-09-26 Fast, dynamic cache packing
US13/627,320 2012-09-26
PCT/US2013/060126 WO2014047050A1 (en) 2012-09-20 2013-09-17 Fast, dynamic cache packing

Publications (2)

Publication Number Publication Date
CN104769559A true CN104769559A (zh) 2015-07-08
CN104769559B CN104769559B (zh) 2017-05-03

Family

ID=48916792

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380054854.1A Active CN104769559B (zh) 2012-09-20 2013-09-17 快速、动态高速缓存封装

Country Status (4)

Country Link
US (2) US8510531B1 (zh)
EP (1) EP2898414B1 (zh)
CN (1) CN104769559B (zh)
WO (1) WO2014047050A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510531B1 (en) * 2012-09-20 2013-08-13 Google Inc. Fast, dynamic cache packing
CN105550341B (zh) * 2015-12-23 2019-05-14 北京奇虎科技有限公司 返回动态数据列表页的定位方法和装置
CN106445502A (zh) * 2016-08-30 2017-02-22 北京小米移动软件有限公司 图像显示方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5734873A (en) * 1995-06-07 1998-03-31 Compaq Computer Corporation Display controller with accelerated drawing of text strings
EP1113369A1 (en) * 1999-12-30 2001-07-04 STMicroelectronics, Inc. Memory system for accelerating graphics operations within an electronic device
US20080082913A1 (en) * 2006-09-29 2008-04-03 Rockwell Automation Technologies, Inc. Digital numeric display with adaptive character width
CN101601017A (zh) * 2007-02-28 2009-12-09 学校法人早稻田大学 存储器管理方法、信息处理装置、程序的生成方法以及程序
US20100060934A1 (en) * 2008-09-11 2010-03-11 Darrell Eugene Bellert Systems and Methods for Optimal Memory Allocation Units
US8510531B1 (en) * 2012-09-20 2013-08-13 Google Inc. Fast, dynamic cache packing

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4882683B1 (en) * 1987-03-16 1995-11-07 Fairchild Semiconductor Cellular addrssing permutation bit map raster graphics architecture
US5515081A (en) * 1993-11-30 1996-05-07 Borland International, Inc. System and methods for improved storage and processing of BITMAP images
US6738526B1 (en) 1999-07-30 2004-05-18 Microsoft Corporation Method and apparatus for filtering and caching data representing images
US7013100B2 (en) 2003-05-16 2006-03-14 Static Control Components, Inc. Method and apparatus for reassembling a toner cartridge
US7149866B2 (en) * 2004-06-04 2006-12-12 International Business Machines Corporation Free item distribution among multiple free lists during garbage collection for more efficient object allocation
US7358975B2 (en) 2004-11-02 2008-04-15 Microsoft Corporation Texture-based packing, such as for packing 8-bit pixels into one bit
US8019465B2 (en) * 2007-07-31 2011-09-13 Align Technology, Inc. System and methods for increasing efficiency in rapid prototyping processes
US8139075B2 (en) 2008-12-10 2012-03-20 Microsoft Corp. Color packing glyph textures with a processor

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5734873A (en) * 1995-06-07 1998-03-31 Compaq Computer Corporation Display controller with accelerated drawing of text strings
EP1113369A1 (en) * 1999-12-30 2001-07-04 STMicroelectronics, Inc. Memory system for accelerating graphics operations within an electronic device
US20080082913A1 (en) * 2006-09-29 2008-04-03 Rockwell Automation Technologies, Inc. Digital numeric display with adaptive character width
CN101601017A (zh) * 2007-02-28 2009-12-09 学校法人早稻田大学 存储器管理方法、信息处理装置、程序的生成方法以及程序
US20100060934A1 (en) * 2008-09-11 2010-03-11 Darrell Eugene Bellert Systems and Methods for Optimal Memory Allocation Units
US8510531B1 (en) * 2012-09-20 2013-08-13 Google Inc. Fast, dynamic cache packing

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
MATT PERDECK: "Fast Optimizing Rectangle Packing Algorithm for Buliding CSS Sprites", 《WWW.CODEPROJECT.COM》 *
POP QUIZ: "Packing Lightmaps", 《BLACKPAWN.COM/TEXTS/LIGHTMAPS》 *

Also Published As

Publication number Publication date
WO2014047050A1 (en) 2014-03-27
EP2898414A1 (en) 2015-07-29
US8510531B1 (en) 2013-08-13
US20140082319A1 (en) 2014-03-20
CN104769559B (zh) 2017-05-03
EP2898414B1 (en) 2016-12-07
US9575896B2 (en) 2017-02-21

Similar Documents

Publication Publication Date Title
AU2010313045B2 (en) Image file generation device, image processing device, image file generation method, image processing method, and data structure for image files
CN109240677A (zh) 一种图层处理方法及装置
CN102122502B (zh) 一种三维字体显示方法以及相关装置
CN108572818A (zh) 一种用户界面渲染方法及装置
EP3971818A1 (en) Picture processing method and apparatus
KR102229742B1 (ko) 동적 이미지를 프리뷰하기 위한 방법 및 디바이스, 그리고 표현 패키지를 디스플레이하기 위한 방법 및 디바이스
CN104985939B (zh) 一种激光打标机控制方法和激光打标机
WO2018126594A1 (zh) 终端的切换显示方法及终端
CN107133199A (zh) 使用压缩机制来获取字体部分
JP2011091769A (ja) 画像ファイル生成装置、画像処理装置、画像ファイル生成方法、画像処理方法、および画像ファイルのデータ構造
US20180357166A1 (en) Method and apparatus for system resource management
CN202261557U (zh) 数码相机通过无线wifi技术使用云存储的系统
CN104769559A (zh) 快速、动态高速缓存封装
US20190080489A1 (en) Method, apparatus and device for creating a texture atlas to render images
CN111931095A (zh) 一种Android系统的图片加载方法
CN111737614B (zh) 页面显示方法、装置、电子设备和存储介质
JP5296656B2 (ja) 画像処理装置および画像処理方法
CN112114919A (zh) 一种屏幕旋转显示的优化方法及装置
CN109739805B (zh) 配置模块的参数的方法和配置模块的参数的装置
CN109636880A (zh) 一种图片绘制方法和装置、控制器及介质
CN116991600B (zh) 图形调用指令的处理方法、装置、设备及存储介质
US9761029B2 (en) Display three-dimensional object on browser
JP6120561B2 (ja) 図形描画装置及び図形描画プログラム
CN107479978B (zh) 电子书显示方法、装置及移动终端
JP4697979B2 (ja) グラフィック命令送信装置及びグラフィック命令送信方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: American California

Patentee after: Google limited liability company

Address before: American California

Patentee before: Google Inc.

CP01 Change in the name or title of a patent holder