| 121 | } |
| 122 | |
| 123 | flatbuffers::Offset<ModelInfo> FbsHelper::build_info() { |
| 124 | flatbuffers::Offset<flatbuffers::Vector<uint8_t>> fb_data; |
| 125 | if (m_model_info && m_model_info->data() && m_packer->m_info_data.empty()) { |
| 126 | auto data = m_model_info->data()->Data(); |
| 127 | auto size = m_model_info->data()->size(); |
| 128 | fb_data = m_builder.CreateVector(data, size); |
| 129 | } else if (!m_packer->m_info_data.empty()) { |
| 130 | fb_data = m_builder.CreateVector(m_packer->m_info_data); |
| 131 | } else { |
| 132 | //! set info->data() to non-null to avoid load_and_run parse model compatibility |
| 133 | //! issue |
| 134 | std::string default_data; |
| 135 | #if MGB_ENABLE_JSON |
| 136 | std::vector<std::pair<mgb::json::String, std::shared_ptr<mgb::json::Value>>> |
| 137 | info; |
| 138 | info.push_back({mgb::json::String("valid"), mgb::json::Bool::make(false)}); |
| 139 | auto obj = mgb::json::Object::make(info); |
| 140 | default_data = obj->to_string(); |
| 141 | #endif |
| 142 | std::vector<uint8_t> json_info(default_data.begin(), default_data.end()); |
| 143 | fb_data = m_builder.CreateVector(json_info); |
| 144 | } |
| 145 | |
| 146 | flatbuffers::Offset<flatbuffers::Vector<uint8_t>> fb_algo_policy; |
| 147 | flatbuffers::Offset<flatbuffers::Vector<uint8_t>> fb_binary_cache; |
| 148 | if (m_packer->m_header.fb32.is_fast_run_cache) { |
| 149 | std::vector<uint8_t> info_algo_policy; |
| 150 | if (!m_packer->m_algo_policy_data.empty()) { |
| 151 | info_algo_policy = m_packer->m_algo_policy_data; |
| 152 | if (m_model_info && m_model_info->algo_policy()) { |
| 153 | auto cache = m_model_info->algo_policy()->Data(); |
| 154 | auto size = m_model_info->algo_policy()->size(); |
| 155 | |
| 156 | uint32_t nr_category_1, nr_category_2, nr_category; |
| 157 | memcpy(&nr_category_1, cache, sizeof(uint32_t)); |
| 158 | memcpy(&nr_category_2, info_algo_policy.data(), sizeof(uint32_t)); |
| 159 | nr_category = nr_category_1 + nr_category_2; |
| 160 | |
| 161 | std::vector<uint8_t> cache_append; |
| 162 | cache_append.resize(sizeof(nr_category)); |
| 163 | memcpy(cache_append.data(), &nr_category, sizeof(nr_category)); |
| 164 | cache_append.insert( |
| 165 | cache_append.end(), cache + sizeof(nr_category), cache + size); |
| 166 | cache_append.insert( |
| 167 | cache_append.end(), |
| 168 | info_algo_policy.begin() + sizeof(nr_category), |
| 169 | info_algo_policy.end()); |
| 170 | |
| 171 | fb_algo_policy = m_builder.CreateVector(cache_append); |
| 172 | } else { |
| 173 | fb_algo_policy = m_builder.CreateVector(info_algo_policy); |
| 174 | } |
| 175 | } |
| 176 | #if LITE_BUILD_WITH_MGE |
| 177 | else { |
| 178 | info_algo_policy = static_cast<mgb::InFilePersistentCache&>( |
| 179 | mgb::PersistentCache::inst()) |
| 180 | .dump_cache(); |
no test coverage detected