Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bac850e6 authored by Ronghua Wu's avatar Ronghua Wu Committed by Android (Google) Code Review
Browse files

Merge "libstagefright: add version string to profile results." into mnc-dev

parents 11804f5c 19352b32
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -73,10 +73,24 @@ sp<IMediaCodecList> MediaCodecList::getLocalInstance() {
            if (gCodecList->initCheck() == OK) {
                sCodecList = gCodecList;

                struct stat s;
                if (stat(kProfilingResults, &s) == -1) {
                FILE *resultsFile = fopen(kProfilingResults, "r");
                if (resultsFile) {
                    AString currentVersion = getProfilingVersionString();
                    size_t currentVersionSize = currentVersion.size();
                    char *versionString = new char[currentVersionSize];
                    fgets(versionString, currentVersionSize, resultsFile);
                    if (strncmp(versionString, currentVersion.c_str(), currentVersionSize) != 0) {
                        // profiling result out of date
                        profilingNeeded = true;
                    }
                    fclose(resultsFile);
                    delete[] versionString;
                } else {
                    // profiling results doesn't existed
                    profilingNeeded = true;
                }

                if (profilingNeeded) {
                    for (size_t i = 0; i < gCodecList->countCodecs(); ++i) {
                        infos.push_back(gCodecList->getCodecInfo(i));
                    }
+12 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include "MediaCodecListOverrides.h"

#include <cutils/properties.h>
#include <gui/Surface.h>
#include <media/ICrypto.h>
#include <media/IMediaCodecList.h>
@@ -34,6 +35,15 @@ namespace android {

const char *kProfilingResults = "/data/misc/media/media_codecs_profiling_results.xml";

AString getProfilingVersionString() {
    char val[PROPERTY_VALUE_MAX];
    if (property_get("ro.build.display.id", val, NULL) && (strlen(val) > 0)) {
        return AStringPrintf("<!-- Profiled-with: %s -->", val);
    }

    return "<!-- Profiled-with: UNKNOWN_BUILD_ID -->";
}

// a limit to avoid allocating unreasonable number of codec instances in the measurement.
// this should be in sync with the MAX_SUPPORTED_INSTANCES defined in MediaCodecInfo.java.
static const int kMaxInstances = 32;
@@ -375,6 +385,8 @@ void exportResultsToXML(
    }

    AString overrides;
    overrides.append(getProfilingVersionString());
    overrides.append("\n");
    overrides.append("<MediaCodecs>\n");
    if (global_results.size() > 0) {
        overrides.append("    <Settings>\n");
+3 −0
Original line number Diff line number Diff line
@@ -26,10 +26,13 @@

namespace android {

extern const char *kProfilingVersionString;
extern const char *kProfilingResults;

struct MediaCodecInfo;

AString getProfilingVersionString();

bool splitString(const AString &s, const AString &delimiter, AString *s1, AString *s2);

// profile codecs and save the result to xml file named kProfilingResults.
+5 −1
Original line number Diff line number Diff line
@@ -150,7 +150,11 @@ TEST_F(MediaCodecListOverridesTest, exportTestResultsToXML) {
    fclose(f);
    free(buf);

    EXPECT_TRUE(overrides == kTestOverridesStr);
    AString expected;
    expected.append(getProfilingVersionString());
    expected.append("\n");
    expected.append(kTestOverridesStr);
    EXPECT_TRUE(overrides == expected);

    remove(fileName);
}