[repacker] include LookupList size when calculating size of 16bit space for ext promotion decisions.
This commit is contained in:
parent
e0607af976
commit
9db3beb721
|
@ -111,6 +111,10 @@ struct graph_t
|
|||
return priority >= 3;
|
||||
}
|
||||
|
||||
size_t table_size () const {
|
||||
return obj.tail - obj.head;
|
||||
}
|
||||
|
||||
int64_t modified_distance (unsigned order) const
|
||||
{
|
||||
// TODO(garretrieger): once priority is high enough, should try
|
||||
|
|
|
@ -34,11 +34,14 @@ make_extension_context_t::make_extension_context_t (hb_tag_t table_tag_,
|
|||
: table_tag (table_tag_),
|
||||
graph (graph_),
|
||||
buffer (buffer_),
|
||||
lookup_list_index (0),
|
||||
lookups ()
|
||||
{
|
||||
GSTAR* gstar = graph::GSTAR::graph_to_gstar (graph_);
|
||||
if (gstar)
|
||||
if (gstar) {
|
||||
gstar->find_lookups (graph, lookups);
|
||||
lookup_list_index = gstar->get_lookup_list_index (graph_);
|
||||
}
|
||||
|
||||
unsigned extension_size = OT::ExtensionFormat1<OT::Layout::GSUB_impl::ExtensionSubst>::static_size;
|
||||
buffer.alloc (num_non_ext_subtables () * extension_size);
|
||||
|
|
|
@ -40,6 +40,7 @@ struct make_extension_context_t
|
|||
hb_tag_t table_tag;
|
||||
graph_t& graph;
|
||||
hb_vector_t<char>& buffer;
|
||||
unsigned lookup_list_index;
|
||||
hb_hashmap_t<unsigned, graph::Lookup*> lookups;
|
||||
|
||||
HB_INTERNAL make_extension_context_t (hb_tag_t table_tag_,
|
||||
|
@ -224,12 +225,17 @@ struct GSTAR : public OT::GSUBGPOS
|
|||
}
|
||||
}
|
||||
|
||||
unsigned get_lookup_list_index (graph_t& graph)
|
||||
{
|
||||
return graph.index_for_offset (graph.root_idx (),
|
||||
get_lookup_list_field_offset());
|
||||
}
|
||||
|
||||
template<typename Types>
|
||||
void find_lookups (graph_t& graph,
|
||||
hb_hashmap_t<unsigned, Lookup*>& lookups /* OUT */)
|
||||
{
|
||||
unsigned lookup_list_idx = graph.index_for_offset (graph.root_idx (),
|
||||
get_lookup_list_field_offset());
|
||||
unsigned lookup_list_idx = get_lookup_list_index (graph);
|
||||
|
||||
const LookupList<Types>* lookupList =
|
||||
(const LookupList<Types>*) graph.object (lookup_list_idx).head;
|
||||
|
|
|
@ -74,6 +74,8 @@ bool _promote_extensions_if_needed (graph::make_extension_context_t& ext_context
|
|||
// TODO(garretrieger): also support extension promotion during iterative resolution phase, then
|
||||
// we can use a less conservative threshold here.
|
||||
|
||||
if (!ext_context.lookups) return true;
|
||||
|
||||
hb_vector_t<hb_pair_t<unsigned, size_t>> lookup_sizes;
|
||||
lookup_sizes.alloc (ext_context.lookups.get_population ());
|
||||
|
||||
|
@ -88,7 +90,9 @@ bool _promote_extensions_if_needed (graph::make_extension_context_t& ext_context
|
|||
|
||||
lookup_sizes.qsort (compare_sizes);
|
||||
|
||||
size_t accumlated_bytes = 0;
|
||||
size_t accumlated_bytes =
|
||||
ext_context.graph.vertices_[ext_context.lookup_list_index].table_size ();
|
||||
|
||||
for (auto p : lookup_sizes)
|
||||
{
|
||||
unsigned lookup_index = p.first;
|
||||
|
|
Loading…
Reference in New Issue