成引擎可以假設(shè)數(shù)據(jù)是有效的和正確的,并且因此適合于再現(xiàn)。因此,可以由對象數(shù)據(jù)庫模塊20執(zhí)行單次驗證,并且然后被合成引擎116利用來執(zhí)行再現(xiàn),而不需要進一步驗證。
[0049]對象數(shù)據(jù)庫模塊204也可以表示用于通知合成引擎116要被再現(xiàn)的數(shù)據(jù)何時改變了的功能性。例如,經(jīng)由用戶模式庫實施的API可被配置來消耗描述要再現(xiàn)什么的圖,其例子在圖3中示出。圖300可包括要被再現(xiàn)的元素列表以及在顯示設(shè)備112上的何處再現(xiàn)元素的描述,其可包括在動畫實例中元素如何移動。
[0050]附加地,要被再現(xiàn)的元素可以通過使用子元素形成,并且因此圖300可以假設(shè)層級結(jié)構(gòu)。而且,圖300可以描述元素要被如何再現(xiàn),例如,繪制一次文本、以60Hz再現(xiàn)動畫等等。因此,圖300可以描述元素以及這些元素如何彼此相關(guān)。
[0051]圖300表示可以被合成引擎116用來再現(xiàn)情景兩組對象、被合成在一起的位圖以及限定合成那些位圖所依據(jù)的空間關(guān)系的視覺件。在這個模型中,位圖是合成引擎116的“什么”而視覺件是合成引擎116的“如何”。那些對象被安排在樹結(jié)構(gòu)中,以及被限于用于合成的頂級或子窗口。
[0052]再次返回到圖2,一旦被合成引擎116接收,應(yīng)用不需要進一步調(diào)用合成引擎116來保持對所述元素進行再現(xiàn)。因此,與可涉及應(yīng)用做出每秒六十次的調(diào)用來以顯示設(shè)備112的刷新速率再現(xiàn)動畫的傳統(tǒng)技術(shù)相比較,合成引擎116可以節(jié)省資源。因此,應(yīng)用110可以調(diào)用用戶模式庫202的API來構(gòu)建結(jié)構(gòu),并且調(diào)用API來構(gòu)建要被合成引擎再現(xiàn)的元素。
[0053]為了對由合成引擎116再現(xiàn)的內(nèi)容做出改變,應(yīng)用可以調(diào)用用戶模式庫202的另一個應(yīng)用編程接口來更新結(jié)構(gòu)和/或元素。例如,應(yīng)用可以經(jīng)由更新的API提供數(shù)據(jù),以便提供要被用于股票自動收報機動畫的信息。
[0054]在一個或多個實施方案中,批處理技術(shù)也可以被利用來限定哪些元素通過使用幀而再現(xiàn)。如前所述,全局合成系統(tǒng)114可以接收各種各樣不同的元素,以用于以各種各樣不同的速率再現(xiàn)。因此,全局合成系統(tǒng)114可以支持其中形成要被一起再現(xiàn)的元素列表的結(jié)構(gòu)。因此,全局合成系統(tǒng)114可以實現(xiàn)用于元素的開始和結(jié)束的定義,其中在開始和結(jié)束之間接收到的元素直到接收到“結(jié)束”才被再現(xiàn)。因此,幀可以支持對于特定幀的元素再現(xiàn)的一種“全部或全無”的方法,并且確保當(dāng)想要時元素一起被再現(xiàn)以用于顯示。
[0055]例如,對象數(shù)據(jù)庫模塊204可以跟蹤對于應(yīng)用的兩種不同狀態(tài)。第一狀態(tài)可以參考用于當(dāng)前顯示的元素。第二狀態(tài)可以參考在第一狀態(tài)后要被顯示并且被改變的元素。因此,第二狀態(tài)可被用來構(gòu)造元素列表,以用于在一旦完成了該列表時,例如一旦從應(yīng)用接收到該列表完整的指示時,就由合成引擎116進行再現(xiàn)。
[0056]一旦完成,就可以把改變發(fā)送到合成引擎116。而且,從應(yīng)用接收的關(guān)于列表已完成的指示的定時可被用來確定何時顯示那些改變,例如,哪一幀。因此,合成引擎116可以接收在一個或多個已完成列表中描述的一批改變,但沒有被指不為完成的列表不被傳送。該批處理因此可以限定由合成引擎116再現(xiàn)的幀。而且,這可以幫助限制如使用不支持這樣的定義的傳統(tǒng)技術(shù)可能發(fā)生的錯誤的視覺偽像的顯示。如應(yīng)當(dāng)容易顯而易見的,對應(yīng)于幀的時間量可根據(jù)期望被設(shè)置為各種各樣不同的時間量。
[0057]因此,對象數(shù)據(jù)庫模塊204可以記住以前由合成引擎116再現(xiàn)了哪些內(nèi)容(例如,元素和那些元素的屬性),以及知曉哪些內(nèi)容要被再現(xiàn)。所以,對象數(shù)據(jù)庫模塊204可以通過比較該信息來確定哪些元素被改變了。因此,對象數(shù)據(jù)庫模塊204可以向合成引擎116傳送描述這種改變的信息,而不傳送沒有被改變的信息。
[0058]附加地,幀的使用還可以改進效率。例如,應(yīng)用可以傳送描述對象要被移動一段特定距離并且返回到原始位置的數(shù)據(jù)。對象數(shù)據(jù)庫模塊204可以確定該移動要在單個幀的時間段內(nèi)發(fā)生。因此,對象數(shù)據(jù)庫模塊204可以制止將該數(shù)據(jù)傳送到合成引擎116,并且而是讓對象保持在其之前的狀態(tài)。例如,該移動可以在用來刷新顯示設(shè)備112的時間段內(nèi)發(fā)生,并且因此不管怎樣都不會被用戶看見。
[0059]這樣,對象數(shù)據(jù)庫模塊204可以在要被提供給合成引擎116以用于再現(xiàn)的列表進行構(gòu)建時丟棄中間狀態(tài)。這個列表然后可以以各種各樣的方式被傳送,諸如,由合成引擎116執(zhí)行以實施改變的命令陣列。而且,這個技術(shù)也可以被用來解決由應(yīng)用發(fā)送的未綁定數(shù)據(jù)的實例,因為單個實例被報告給合成引擎。
[0060]對象數(shù)據(jù)庫模塊204和合成引擎116也可以采用描述改變被實施的確認(rèn)技術(shù)。例如,合成引擎116可以從對象數(shù)據(jù)庫模塊204接收描述要作出改變的通信。在正在作出改變時,對象數(shù)據(jù)庫模塊204可以等待發(fā)送附加的改變,直至接收到做出了之前改變的確認(rèn)為止。一旦對象數(shù)據(jù)庫模塊204接收到所述確認(rèn),附加改變?nèi)缓罂梢员粋魉偷胶铣梢?。[0061 ] 而且,這個技術(shù)可被用來提供“節(jié)流(throttI ing) ”,并且因此進一步節(jié)省計算設(shè)備102的資源。例如,應(yīng)用可以作出超過顯示設(shè)備被刷新的速率的許多請求。通過使用幀和對改變進行批處理,將以其他方式被消耗的資源量被減少。
[0062]通過調(diào)用用戶模式庫202的API對要顯示什么作出改變的應(yīng)用可以是多線程的。因此,在一個或多個實施方案中,對象數(shù)據(jù)庫模塊204可以采用技術(shù)以使得來自單個應(yīng)用的多個線程的多個調(diào)用不會造成狀態(tài)的損壞。這可以通過應(yīng)用自身將其線程鎖定在一起來執(zhí)行,例如,一個線程可能被阻塞,而同時應(yīng)用的另一個線程完成任務(wù)。
[0063]來自多個線程的改變?nèi)缓罂梢员淮鎯υ陉犃兄?,該隊列可以由操作系統(tǒng)108諸如通過可用于變量的聯(lián)鎖訪問來管理,這樣,不同的線程可以在在做出“完整”改變后再把控制傳遞到另一個線程。這可以支持以上描述的幀技術(shù),以達到被合成引擎處理的工作的原子單元。附加地,對于沒有接收到更新的幀,可以在下一幀之前暫停合成引擎的執(zhí)行,由此進一步節(jié)省計算設(shè)備102的資源。
[0064]內(nèi)核216還可以與全局合成系統(tǒng)114相結(jié)合地加上各種各樣的功能性。例如,當(dāng)應(yīng)用失敗(例如,崩潰)時,內(nèi)核216可以把該發(fā)生通知合成引擎116。合成引擎116然后可以執(zhí)行類似于如果應(yīng)用通過正常退出過程“自然地”停止執(zhí)行時將被使用的那些技術(shù)的技術(shù)。這樣,合成引擎116可以“清理”狀態(tài),以使得對應(yīng)于應(yīng)用的元素從計算設(shè)備102的顯示設(shè)備112上的顯示中移除。因此,這促進了合成引擎116的執(zhí)行中的魯棒性。
[0065]合成引擎116的執(zhí)行也可以通過實施對于用戶模式庫202的只寫(write - only)API而保護安全。這樣,合成引擎116可以生成像素,但不把那些像素暴露給應(yīng)用,由此保護圖像免受惡意方侵害。
[0066]如前所述,這些技術(shù)的實施方案也可能涉及在計算設(shè)備102 “外面”的設(shè)備,其可跨諸如web服務(wù)104之類的一個或多個實體分布。例如,這些技術(shù)可被用來通過經(jīng)由網(wǎng)絡(luò)106的元素和屬性的分批(例如,諸如圖3的圖300之類的合成樹)的通信而支持終端服務(wù)、遠程臺式環(huán)境等等。因此,圖300可以在別處生成(例如,通過在web服務(wù)104上實施用戶模式庫202和/或?qū)ο髷?shù)據(jù)庫模塊204),并且通過計算設(shè)備102的執(zhí)行,傳遞合成樹以用于由合成引擎116再現(xiàn)。這樣,即使在網(wǎng)絡(luò)106不可靠的實例中,動畫也可被平滑地顯示。這些和其他技術(shù)的進一步討論可以在以下關(guān)于共享合成資源的章節(jié)中找到。
[0067]共享合成資源
圖4圖示了示例性系統(tǒng)400,其中全局合成系統(tǒng)114被更詳細地圖示為支持共享合成資源。如前所述,全局合成系統(tǒng)114包括圖1的合成引擎116。應(yīng)用進程210、212經(jīng)由包括API 206、208和用來訪問合成引擎116的句柄的語義模型與內(nèi)核216交互,所述合成引擎116被圖示為在其本身的進程214內(nèi)執(zhí)行并且可被用來將實際執(zhí)行和實施方案進行抽象,如在下面進一步描述的。進程210、212可以對應(yīng)于單個應(yīng)用、多個應(yīng)用等等。系統(tǒng)400還包括經(jīng)由用戶和內(nèi)核模式218、220實施的之前的信任邊界,但是其他例子也是被預(yù)期的。
[0068]合成引擎116在本例中被配置成支持由應(yīng)用進程210、212共享合成資源402的能力。合成資源可以取各種各樣的形式,諸如浮動、顏色、動畫觸發(fā)、變換、視覺件、使用圖案或其他視覺屬性。這可用來支持在再現(xiàn)用于在顯示設(shè)備上進行顯示的元素中涉及的各種各樣不同的技術(shù),諸如支持部件托管、如圖5所示的共享視覺資源以便在一個框架內(nèi)托管另一框架等等。這種共享可以以各種各樣的方式被實施,其例子在下面描述并且在對應(yīng)的圖中示出。
[0069]圖5描繪了圖500,其被配置為包括可共享視覺資源402的全局合成樹,所述可共享視覺資源由寫入器和讀取器進程相關(guān)聯(lián)地實施。在本例中,合成引擎116可以實施安全模型,其中進程的責(zé)任上文被很好地限定(例如,通過寫入器/讀取器范例)并且根據(jù)哪些節(jié)點對應(yīng)于哪個進程來管理圖500中的訪問。例如,讀取器視覺樹502是被托管的框架,其由寫入器視覺樹504通過使用共享合成資源402而被托管,而不是在分開的合成樹中實施的兩個分開