Ejemplo n.º 1
0
// static
size_t MemoryProfile::getSizeOfTV(const TypedValue* tv) {
  if (!RuntimeOption::HHProfServerEnabled) return 0;

  switch (tv->m_type) {
  case KindOfString:
    return getSizeOfPtr(tv->m_data.pstr);
  case KindOfArray:
    return getSizeOfArray(tv->m_data.parr);
  case KindOfObject:
    return getSizeOfObject(tv->m_data.pobj);
  case KindOfRef:
    return getSizeOfPtr(tv->m_data.pref);
  default:
    return 0;
  }
}
Ejemplo n.º 2
0
// static
size_t MemoryProfile::getSizeOfTV(TypedValue *tv) {
  if (!memory_profiling) return 0;

  switch (tv->m_type) {
    case KindOfString:
      return getSizeOfPtr(tv->m_data.pstr);
    case KindOfArray:
      return getSizeOfArray(tv->m_data.parr);
    case KindOfObject:
      return getSizeOfObject(tv->m_data.pobj);
    case KindOfRef:
      return getSizeOfPtr(tv->m_data.pref);
    default:
      return 0;
  }
}
Ejemplo n.º 3
0
// static
size_t MemoryProfile::getSizeOfObject(ObjectData *obj) {
  auto ret = getSizeOfPtr(obj);
  if (ret == 0) { return 0; }
  if (UNLIKELY(obj->getAttribute(ObjectData::HasDynPropArr))) {
    auto& props = obj->dynPropArray();
    ret += getSizeOfArray(props.get());
  }
  return ret;
}
Ejemplo n.º 4
0
// static
size_t MemoryProfile::getSizeOfArray(ArrayData *arr) {
  size_t size = getSizeOfPtr(arr);
  if (size == 0) { return 0; }
  if (arr->isHphpArray()) {
    // calculate extra size
    HphpArray *ha = static_cast<HphpArray *>(arr);
    size_t hashSize = ha->hashSize();
    size_t maxElms = HphpArray::computeMaxElms(ha->m_tableMask);
    if (maxElms > HphpArray::SmallSize) {
      size += maxElms * sizeof(HphpArray::Elm) + hashSize * sizeof(int32_t);
    }
  }
  return size;
}
Ejemplo n.º 5
0
// static
size_t MemoryProfile::getSizeOfArray(ArrayData *arr) {
  size_t size = getSizeOfPtr(arr);
  if (arr->isHphpArray()) {
    // calculate extra size
    HphpArray *ha = static_cast<HphpArray *>(arr);
    size_t tableSize = HphpArray::computeTableSize(ha->m_tableMask);
    size_t maxElms = HphpArray::computeMaxElms(ha->m_tableMask);
    if (maxElms > HphpArray::SmallSize) {
      size_t hashSize = tableSize * sizeof(HphpArray::ElmInd);
      size_t dataSize = maxElms * sizeof(HphpArray::Elm);
      size += (hashSize <= sizeof(ha->m_inline_hash))
        ? dataSize
        : dataSize + hashSize;
    }
  }
  return size;
}
Ejemplo n.º 6
0
// static
size_t MemoryProfile::getSizeOfArray(ArrayData* arr) {
  // Some non-flat array types have extra memory (e.g. the local TV
  // cache of an apc local array), but we haven't implemented this.
  return getSizeOfPtr(arr);
}
Ejemplo n.º 7
0
// static
size_t MemoryProfile::getSizeOfObject(ObjectData *obj) {
  ArrayData* props = obj->o_properties.get();
  return getSizeOfPtr(obj) + (props ? getSizeOfArray(props) : 0);
}